[Hilo Oficial II] Java

1, 2, 3, 4, 5, 616
Buenas.

Primeramente una pplet en Swing debe descender de Japplet no de Applet, después la forma de organización, pues depende de ti :) lo puedes hacer en tantas clases como quieras eso es indiferente.

Yo siempre lo separo de esta forma mas o menos

Un paquete para el entorno visual
Un paquete para BBDD
Un paquete para funciones
etc etc...

Eso si, si estás pensando en hacer algo bastante grande, lo mismo te interesa hacer una aplicación web para que corra en tomcat por ejemplo, un applet a mi modo de ver no debe ser muy pesado.
Gracias daniel_5.

Sí, entiendo lo que quieres decir en la forma de dividirlo, y desde luego que acabaré haciendolo de la forma más próxima a mi estilo, el asunto es que me gustaría tener un ejemplo o algo parecido que me permita empezar a "jugar" (entre otras cosas porque hace bastante que no hago nada en java, y nunca he tenido mucha soltura haciéndolo (y esto puede aplicarse al diseño OO en general)).

Lo de hacer una aplicacion web no es mala idea, desde luego, pero en principio se me ha pedido que sea un applet, asi que... De todas formas el programa no tiene que interactuar con una BBDD, asi que dentro de lo que cabe no será "tan" pesado.
Buehno, ya mañana me pondré a hacer una página web comercial, mi primer proyecto medianamente serio en java.

El concepto es sencillo; Es una página web a través de la cual un cierto número de empresas van a poder contratar unos servicios de la empresa para la que voy a trabajar. Así que será una serie de formularios, en los que el contratante va a tener que especificar eel servicio que quiere, para cuándo lo quiere, para cuánta gente, en qué lugar, etc etc. El temita gordo será crear las bases de datos.

Lo que me acabo de acojonar porque le he dicho a mi hermano que quiero intentar acabarlo en un mes y medio (para abril me querré apuntar a un curso de J2EE, hibernate, ajax, etc), y me ha dicho que ni de coña [mad] Soy novato y lo más complejo que he hecho me ha llevado dos días, pero joder.
A ver si alguien me puede echar un cable... Aclaro que estoy muy verde el programación OO así que probablemente esté preguntando alguna tontería [+risas] .

Vereis, tengo 3 clases:
-Ejemplo: la clase principal que extiende de JApplet. Tiene un metodo createGUI que pondré un poco más abajo.
-areaDibujo: recibe un contenedor por parametro. He creado en ella una funcion que pone un label en el contenedor con el texto que le pase por parametro (ponerLabel("texto"));
-barraMenuEj: una clase que me crea mi barra de menu (implementa actionListener). Se le pasa por parametro el areaDibujo para que sus listeners puedan acceder a las funciones de esa areaDibujo.

el metodo createGUI hace lo siguiente:
private void createGUI() {
areaDibujo miarea = new areaDibujo(getContentPane());
mibarramenu= new barraMenuEj(miarea);
setJMenuBar(mibarramenu.getBarraMenu());
}

Basicamente lo que quiero es que mi programa que es una simple barra de menu y un area vacia, dibuje algo (un label, en este caso) en el area vacía cuando pulso un boton en el menu. El problema es que aunque el actionPerformed se ejecuta bien, al hacer "ponerLabel" desde barraMenuEj no se pinta nada en el area vacía...

Insisto en que seguro que me dejo algo básico, pero estoy muy verde en el tema ^^U.

PD: Lo sé, es una chorrada de programa, pero si consigo ver como enganchar este tipo de cosas, no me costará escalarlo XD
masterpok escribió:A ver si alguien me puede echar un cable... Aclaro que estoy muy verde el programación OO así que probablemente esté preguntando alguna tontería [+risas] .

Vereis, tengo 3 clases:
-Ejemplo: la clase principal que extiende de JApplet. Tiene un metodo createGUI que pondré un poco más abajo.
-areaDibujo: recibe un contenedor por parametro. He creado en ella una funcion que pone un label en el contenedor con el texto que le pase por parametro (ponerLabel("texto"));
-barraMenuEj: una clase que me crea mi barra de menu (implementa actionListener). Se le pasa por parametro el areaDibujo para que sus listeners puedan acceder a las funciones de esa areaDibujo.

el metodo createGUI hace lo siguiente:
private void createGUI() {
areaDibujo miarea = new areaDibujo(getContentPane());
mibarramenu= new barraMenuEj(miarea);
setJMenuBar(mibarramenu.getBarraMenu());
}

Basicamente lo que quiero es que mi programa que es una simple barra de menu y un area vacia, dibuje algo (un label, en este caso) en el area vacía cuando pulso un boton en el menu. El problema es que aunque el actionPerformed se ejecuta bien, al hacer "ponerLabel" desde barraMenuEj no se pinta nada en el area vacía...

Insisto en que seguro que me dejo algo básico, pero estoy muy verde en el tema ^^U.

PD: Lo sé, es una chorrada de programa, pero si consigo ver como enganchar este tipo de cosas, no me costará escalarlo XD

Crea la label sin texto y luego cuando quieras "crearla" simplemente le añades el texto.

Un saludo.
Buenas estoy haciendo un comecocos, y ahora mismo lo dibujo y empieza el movimiento automaticamente hacia la derecha, pero cuando intento mover el pacman, no me coge los eventos de teclado, y no se porque puede ser....

Aquí os dejo el código:

Main.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("Depuracion");
        Tablero t= new Tablero();
        System.out.println("Depuracion");
        MiCanvas lienzo = new MiCanvas(t);
        System.out.println("Depuracion");
        Marco m = new Marco(lienzo);
        System.out.println("Depuracion");
        Movimientos  mov = new Movimientos(t,lienzo);
        lienzo.setMueve(mov);
        mov.reanudar();
    }
}


Tablero.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comecocos;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Tablero {
String rejilla[] = {"BBBBBBBBBBBBBBBBBBBBBBBBBBBB",
    "B............BB............B",
    "B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
    "BoBBBB.BBBBB.BB.BBBBB.BBBBoB",
    "B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
    "B..........................B",
    "B.BBBB.BB.BBBBBBBB.BB.BBBB.B",
    "B.BBBB.BB.BBBBBBBB.BB.BBBB.B",
    "B......BB....BB....BB......B",
    "BBBBBB.BBBBB BB BBBBB.BBBBBB",
    "     B.BBBBB BB BBBBB.B     ",
    "     B.BB          BB.B     ",
    "     B.BB BB____BB BB.B     ",
    "BBBBBB.BB B      B BB.BBBBBB",
    "      .   B      B   .      ",
    "BBBBBB.BB B      B BB.BBBBBB",
    "     B.BB BBBBBBBB BB.B     ",
    "     B.BB          BB.B     ",
    "     B.BB BBBBBBBB BB.B     ",
    "BBBBBB.BB BBBBBBBB BB.BBBBBB",
    "B............BB............B",
    "B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
    "B.BBBB.BBBBB.BB.BBBBB.BBBB.B",
    "Bo..BB................BB..oB",
    "BBB.BB.BB.BBBBBBBB.BB.BB.BBB",
    "BBB.BB.BB.BBBBBBBB.BB.BB.BBB",
    "B......BB....BB....BB......B",
    "B.BBBBBBBBBB.BB.BBBBBBBBBB.B",
    "B.BBBBBBBBBB.BB.BBBBBBBBBB.B",
    "B..........................B",
    "BBBBBBBBBBBBBBBBBBBBBBBBBBBB"};
    static final char BLOQUE = 'B'; // Tipos de celda de Tablero
    static final char CASILLA = '.';
    static final char CASILLA_VACIA = ' ';
    static final char CASILLA_COMIDA = 'o';
    static final char PUERTA = '_';
    static final char PACMAN = 'X';
    private char[][] celdas;
    private static final int ANCHO = 28;
    private static final int ALTO = 31;
    private Pacman pac;


    public Tablero(){
        System.out.println("Dentro de Tablero");
        pac = new Pacman();
        System.out.println("Pacman Creado");
        String c ;
        char carac;
        int x=0;
        celdas= new char[ALTO][ANCHO];
        for(int i=0;i<ALTO;i++){
            c=rejilla[i];
            for(int j=0;j<ANCHO;j++){
                carac=c.charAt(j);
                if( carac==BLOQUE)
                    celdas[i][j]=carac;
                if(carac ==CASILLA)
                    celdas[i][j]=carac;
                if(carac ==CASILLA_VACIA)
                    celdas[i][j]=carac;
                if(carac ==CASILLA_COMIDA)
                    celdas[i][j]=carac;
                if(carac ==PUERTA)
                    celdas[i][j]=carac;
                x++;
            }
        }
        celdas[23][13]=PACMAN;
        pac.SetDireccion(Pacman.DERECHA);
        System.out.println("Fin de tablero");
    }

    public int Get(int fila,int columna){
        return celdas[fila][columna];
    }
    public void Set(int fila,int columna,char c){
        celdas[fila][columna]=c;
    }
    public int GetFilas(){
        return ALTO;
    }
    public int GetColumnas(){
        return ANCHO;
    }
    public void SetDireccion(int d){
        pac.SetDireccion(ALTO);
    }

    public int PosicionPacman(){
        System.out.println("Dentro de posicion Pacman");
        Coordenada co =  pac.MuevePacman();
        Coordenada coord= null;
        int dev = 0;

        if(celdas[co.GetFila()][co.GetColumna()] == CASILLA ){
            celdas[co.GetFila()][co.GetColumna()]= PACMAN;
            coord = this.CoordenadaAnterior(co, pac.GetDireccion());
            celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
            dev=CASILLA;
        }
        if(celdas[co.GetFila()][co.GetColumna()] == CASILLA_COMIDA){
            celdas[co.GetFila()][co.GetColumna()]= PACMAN;
            coord = this.CoordenadaAnterior(co, pac.GetDireccion());
            celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
            dev=CASILLA_COMIDA;
        }
        if(celdas[co.GetFila()][co.GetColumna()] == CASILLA_VACIA){
            celdas[co.GetFila()][co.GetColumna()]= PACMAN;
            coord = this.CoordenadaAnterior(co, pac.GetDireccion());
            celdas[coord.GetFila()][coord.GetColumna()]= CASILLA_VACIA;
            dev=CASILLA_VACIA;
        }
        if(celdas[co.GetFila()][co.GetColumna()] == BLOQUE){
            coord=this.DeterminarPosicion(co,pac.GetDireccion());
            celdas[coord.GetFila()][coord.GetColumna()]= PACMAN;
            dev=BLOQUE;
        }
        return dev;
    }



    private Coordenada DeterminarPosicion(Coordenada cod,int dir){
        Coordenada co = null;
        if(dir==Pacman.DERECHA){
            co = new Coordenada(cod.GetFila(),cod.GetColumna()-1);
        }
        if(dir==Pacman.IZQUIERDA){
            co = new Coordenada(cod.GetFila(),cod.GetColumna()+1);
        }
        if(dir==Pacman.ARRIBA){
            co = new Coordenada(cod.GetFila()-1,cod.GetColumna());
        }
        if(dir==Pacman.ABAJO){
            co = new Coordenada(cod.GetFila()+1,cod.GetColumna());
        }
        return co;
    }

    private Coordenada CoordenadaAnterior(Coordenada cod,int dire){
        Coordenada co = null;
        if(dire == Pacman.ABAJO)
            co = new Coordenada(cod.GetFila()+1,cod.GetColumna());
        if(dire == Pacman.ARRIBA)
            co = new Coordenada(cod.GetFila()-1,cod.GetColumna());
        if(dire == Pacman.DERECHA)
            co = new Coordenada(cod.GetFila(),cod.GetColumna()+1);
        if(dire == Pacman.ABAJO)
            co = new Coordenada(cod.GetFila(),cod.GetColumna()-1);
        return co;
    }


}



Pacman.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Pacman {
    private int n_vidas;
    static final int ARRIBA = 2;
    static final int ABAJO = 0;
    static final int DERECHA = 3;
    static final int IZQUIERDA = 1;
    private Coordenada coord;
   
    private int direccion;
    Pacman(){
        n_vidas=3;
        coord = new Coordenada(23,13);
    }

    public void SetDireccion(int d){
        direccion=d;
    }

    public int GetDireccion(){
        return direccion;
    }

    public Coordenada MuevePacman(){
        switch(direccion){
            case IZQUIERDA:
                coord.SetColumna(coord.GetColumna()-1);
                break;
            case DERECHA:
                coord.SetColumna(coord.GetColumna()+1);
                break;
            case ARRIBA:
                coord.SetFila(coord.GetFila()-1);
                break;
            case ABAJO:
                coord.SetFila(coord.GetFila()-1);
                break;
            default:
                break;
        }
        return coord;
    }

}


Movimientos.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;

import javax.swing.JLabel;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Movimientos implements Runnable {
    private Tablero tab;
    private Pacman pac;
    private MiCanvas cav=null;
    private int puntos;
    private JLabel labelPuntuacion;
    private boolean continuar = true;
    private boolean suspendFlag = true;

    Movimientos(Tablero t,MiCanvas c){
        tab=t;
        cav=c;
        puntos=0;
        Thread hilo= new Thread(this);
        System.out.println("va a comenzar el hilo");
        hilo.start();
        System.out.println("El hilo a terminado?");
    }

    Movimientos(Tablero t, Pacman p, MiCanvas c,JLabel label){
        tab=t;
        pac=p;
        cav=c;
        puntos=0;
        labelPuntuacion=label;
        Thread hilo= new Thread(this);
        hilo.start();
        System.out.println("Comienza el hilo");
    }

    public void run() {
        try{
            System.out.println("Dentro de run");
            while(continuar){
                synchronized(this){
                    while(suspendFlag){
                        System.out.println("Antes de esperar");
                        wait();
                        System.out.println("Esperando");
                    }
                }
                Thread.sleep(500);
                System.out.println("El hilo a dormido");
                int sit = tab.PosicionPacman();
                if(cav!=null)
                    cav.repaint();
                /*if(sit == Tablero.CASILLA)
                   
                if(sit == Tablero.CASILLA_COMIDA)
               
                if(sit == Tablero.CASILLA_VACIA)*/
              }


   /*if((sit==Serpiente.CHOCA_BLOQUE)||(sit==Serpiente.CHOCA_SERPIENTE)){
     suspender();
     inicializaJuego();
     canvas.repaint();
     labelPuntuacion.setText("Puntuaci�n = "+puntuacion);
     reanudar();

   }
   else if(m==Serpiente.COME_RATON){
     puntuacion++;
     labelPuntuacion.setText("Puntuaci�n = "+puntuacion);
   }
            }
        }
        catch(InterruptedException e){
            System.out.println("Hilo Comecocos interrumpido");
        }*/
    }

catch(InterruptedException e){
            System.out.println("Hilo Comecocos interrumpido");
        }
    }

  public synchronized void reanudar(){
    suspendFlag = false;
    notify();
  }



}



MiCanvas.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;

/**
*
* @author ismaelrodriguezmoreno
*/
public class MiCanvas extends JPanel implements KeyListener, MouseListener{
    private Tablero tab;
    private Movimientos mov;
    static final int TAM = 20;

    MiCanvas(Tablero t) {
        tab = t;
        //addMouseListener(this);
        //addKeyListener(this);
  }

   
   
    @Override
    synchronized public void paintComponent(Graphics g){
        Graphics screengc=g;
        g.setColor(Color.BLACK);
        g.fillRect(0,0,getWidth(),getHeight());
        g.setColor(Color.WHITE);
        dibujarTablero(g);
    }


    private void dibujarTablero(Graphics g){
        int x=0,y=0;
        int filas = tab.GetFilas();
        int columnas = tab.GetColumnas();
        for(int i=0;i<filas;i++){
            for(int j=0;j<columnas;j++){
                if(tab.Get(i,j) ==  Tablero.BLOQUE){
                    g.setColor(Color.BLUE);
                    g.fillRect(x, y, TAM,TAM);
                    //g.drawRect(x,y,TAM,TAM);
                }
                if(tab.Get(i,j) ==  Tablero.CASILLA){
                    g.setColor(Color.YELLOW);
                    g.fillArc(x+(TAM/2)-3, y+(TAM/2)-3, 6, 6, 0,360);
                }
                if(tab.Get(i,j) ==  Tablero.CASILLA_COMIDA){
                    g.setColor(Color.YELLOW);
                    g.fillArc(x+(TAM/2)-5, y+(TAM/2)-5,10,10, 0,360);
                }
                if(tab.Get(i,j) ==  Tablero.PUERTA){
                    g.setColor(Color.WHITE);
                    g.drawLine(x, y+TAM, x+TAM, y+TAM);
                }
                if(tab.Get(i, j)== Tablero.PACMAN){
                    g.setColor(Color.YELLOW);
                    g.fillArc(x+(TAM/2)-9, y+(TAM/2)-9, 18, 18, 0, 360);
                }
                x+=TAM;
            }
            x=0;
            y+=TAM;
        }
    }
    @Override
  public boolean isFocusTraversable(){
    return true;
  }

  public void mouseClicked(MouseEvent e){
  }

  public void mouseEntered(MouseEvent e){
    requestFocus();
  }

  public void mouseExited(MouseEvent e){
  }

  public void mousePressed(MouseEvent e){
  }

  public void mouseReleased(MouseEvent e){
  }


  public void keyTyped(KeyEvent evt){
  }

    public void setMueve(Movimientos m){
        mov=m;
    }
   
  public void keyReleased(KeyEvent evt){
   // System.out.println("KeyReleased getKeyCode="+evt.getKeyCode());
   // System.out.println("KeyReleased getKeyChar="+evt.getKeyChar());
   // System.out.println("KeyReleased getModifiers="+evt.getModifiers());
  }
    public void keyPressed(KeyEvent evt) {
        System.out.println("Se ha producido un evento");
        if(evt.getKeyCode()==KeyEvent.VK_UP){
            System.out.println("Pulsado ARRIBA");
            tab.SetDireccion(Pacman.ARRIBA);
        }
        else if(evt.getKeyCode()==KeyEvent.VK_DOWN){
            System.out.println("Pulsado ABAJO");
            tab.SetDireccion(Pacman.ABAJO);
        }
        else if(evt.getKeyCode()==KeyEvent.VK_LEFT){
            System.out.println("Pulsado IZQUIERDA");
            tab.SetDireccion(Pacman.IZQUIERDA);
        }
        else if(evt.getKeyCode()==KeyEvent.VK_RIGHT){
            System.out.println("Pulsado DERECHA");
            tab.SetDireccion(Pacman.DERECHA);
        }
        /*else if(evt.getKeyCode()==KeyEvent.VK_SPACE){
        if(!mueve.getParado())
            mueve.suspender();
        else
            mueve.reanudar();
        }*/
    }
  }


Marco.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Marco extends JFrame {
    private MiCanvas lienzo;
    private JLabel ptos;

    public Marco(MiCanvas c){
        /*lienzo = c;
        Button boton = new Button("Salir");
        boton.setName("Salir");
        ptos=new Label("Puntuacion = 0");
        setSize(600,700);
        setLayout(new BorderLayout());
        add("North",ptos);
        add("Center",lienzo);
        add("South",boton);
        setVisible(true);
        lienzo.setVisible(true);
        boton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if(event.toString().indexOf("on Salir") != -1) {
                    System.exit(0);
                }
            }
        }
        );*/


       lienzo = c;
    JButton boton = new JButton("Salir");
    boton.setName("Salir");
    ptos=new JLabel("Puntuacion = 0");
    setSize(600,700);

    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(ptos,BorderLayout.NORTH);
    getContentPane().add(lienzo,BorderLayout.CENTER);
    getContentPane().add(boton,BorderLayout.SOUTH);
    setVisible(true);
    pack();
    boton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        if(event.toString().indexOf("on Salir") != -1) {
          System.exit(0);
   }
      }
    }
    );

    }
}


Coordenada.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package comecocos;

/**
*
* @author ismaelrodriguezmoreno
*/
public class Coordenada {
    private int fila;
    private int columna;
    Coordenada(){
        fila=0;
        columna=0;
    }
    Coordenada(int f,int c){
        fila=f;
        columna =c;
    }
    public void SetFila(int f){
        fila=f;
    }
    public int GetFila(){
        return fila;
    }
    public void SetColumna(int c){
        columna=c;
    }
    public int GetColumna(){
        return columna;
    }
    public void SetCoordenada(int f, int c){
        fila=c;
        columna=c;
    }
    public Coordenada GetCoordenada(){
        return this;
    }
}
Puyover escribió:Crea la label sin texto y luego cuando quieras "crearla" simplemente le añades el texto.

Un saludo.
Muchas gracias, por alguna razón no me llegó el aviso de que alguien había respondido ^^U.
Volviendo al tema... no habría ninguna manera de hacer esto creando el label directamente? Es que para este ejemplo en concreto daría igual, pero yo luego necesitaré dibujar cosas en el "area de dibujo" [agggtt]
[boing] Up [boing]
pasteles escribió:Buenas estoy haciendo un comecocos, y ahora mismo lo dibujo y empieza el movimiento automaticamente hacia la derecha, pero cuando intento mover el pacman, no me coge los eventos de teclado, y no se porque puede ser....


1º-En la clase Tablero.java creas un pacman y luego otro en Movimientos.java.
2º-El codigo esta sin comentar, si ya cuesta entender un codigo de otra persona... si no esta comentado es casi imposible.
3º-Se ve que empezaste bien pero despues te empezaron a no salir las cosas y ya la liates.
4º-No hace falta crear tantas clases, con 3 clases para lo que llevas basta (director, tablero y pacman)
Buenas, estoy terminando la carrera de ing tecnica en informatica de sistemas y no tengo ninguna asignatura para el segundo cuatrimestre, asi q habia pensado en estudiar ingles y sacarme la certificacion java. He estado echando un ojo a la web de sun (http://www.sun.com/training/certification/java/index.xml) y me enteresaria el SCJP y luego ya pensarme si hacer alguno mas, lo q pasa es q no he encntrado donde se hacen los examenes ni ninguna academia donde prepararse o me den algo mas de informacion

Se admiten recomendaciones, tanto para hacer algun curso como para estudiarme algo en casa por libre, he pensado en JAVA xq es el lenguaje q mas domino y en el que he echo la mayoria de las practicas de la carrera.

Salu2
Bueno, pues la verdad es que ya tengo mi programa muy avanzado, con su zona de dibujo, un panel con propiedades, sus barras de herramientas etc.
Pero ahora me he encontrado con una pijada que no consigo hacer (nada importante, pero bueno), a ver si alguien que tenga más soltura que yo en asuntos de layouts y tal puede echarme una mano:
Tengo un JFrame, dentro hago un Jpanel al que le voy poniendo labels. Tengo los labels puestos de forma que vayan a uno por linea (con un GridBagLayout en el JPanel). El "problema" es que al ponerle un tamaño fijo al JFrame, el JPanel me queda centrado, mientras que me gustaría que quedara empezando arriba a la izquierda (como cuando empiezas a escribir un bloc de notas).
Alguien sabe como puedo hacer eso? Es que JFrame parece que no me deja usar sobre él GridBagLayout :S
hola, tengo una duda, soy bastante amateur en esto pero tengo algun programita que hace 4 tonterias... pero claro, a mi me gustaria hacer un ejecutable para pasarselo a mis amigos (me hace bastante ilusion [ayay] ) como se hace, porque yo lo corro en el jcreator que tiene una ventanita para hacerlo correr, pero claro no le voy a ir diciendo a mis amigos k se creen el jcreator i tal, xD i tampoco les pedire que lo corran en el terminal (porque no sabrian xD)

saludos
ShinMegami escribió:hola, tengo una duda, soy bastante amateur en esto pero tengo algun programita que hace 4 tonterias... pero claro, a mi me gustaria hacer un ejecutable para pasarselo a mis amigos (me hace bastante ilusion [ayay] ) como se hace, porque yo lo corro en el jcreator que tiene una ventanita para hacerlo correr, pero claro no le voy a ir diciendo a mis amigos k se creen el jcreator i tal, xD i tampoco les pedire que lo corran en el terminal (porque no sabrian xD)

saludos


Pues deberías generar un .jar a partir de los .class desde el jCreator y luego pasarle al .jar un programa como nativeJ para convertirlo a .exe.

Un saludo.
ShinMegami escribió:hola, tengo una duda, soy bastante amateur en esto pero tengo algun programita que hace 4 tonterias... pero claro, a mi me gustaria hacer un ejecutable para pasarselo a mis amigos (me hace bastante ilusion [ayay] ) como se hace, porque yo lo corro en el jcreator que tiene una ventanita para hacerlo correr, pero claro no le voy a ir diciendo a mis amigos k se creen el jcreator i tal, xD i tampoco les pedire que lo corran en el terminal (porque no sabrian xD)

saludos

echale una mirada a esto http://java.sun.com/docs/books/tutorial/deployment/jar/index.html

Ahora una duda que tengo yo, es posible hacer que un programa se adapte al look and feel de cada usuario? es decir que si por ejemplo yo ejecuto mi programa en ubuntu tenga el look and feel de ubuntu, en xp el de xp, etc.
amarco90 escribió:
ShinMegami escribió:hola, tengo una duda, soy bastante amateur en esto pero tengo algun programita que hace 4 tonterias... pero claro, a mi me gustaria hacer un ejecutable para pasarselo a mis amigos (me hace bastante ilusion [ayay] ) como se hace, porque yo lo corro en el jcreator que tiene una ventanita para hacerlo correr, pero claro no le voy a ir diciendo a mis amigos k se creen el jcreator i tal, xD i tampoco les pedire que lo corran en el terminal (porque no sabrian xD)

saludos

echale una mirada a esto http://java.sun.com/docs/books/tutorial/deployment/jar/index.html

Ahora una duda que tengo yo, es posible hacer que un programa se adapte al look and feel de cada usuario? es decir que si por ejemplo yo ejecuto mi programa en ubuntu tenga el look and feel de ubuntu, en xp el de xp, etc.


Este codigo deberia funcionar:
try {
           UIManager.setLookAndFeel(
               UIManager.getSystemLookAndFeelClassName());
       } catch (Exception e) {}



Debe ir en el main.

un saludo ;)
Jonri escribió:Este codigo deberia funcionar:
try {
           UIManager.setLookAndFeel(
               UIManager.getSystemLookAndFeelClassName());
       } catch (Exception e) {}



Debe ir en el main.

un saludo ;)

Perfecto. Muchas gracias! [sonrisa]
Vaya!!! Resulta que hay un hilo oficial de Java y yo sin enterarme!!

Me gusta mucho programar, y con Java encontré un filón, se puede hacer prácticamente cualquier cosa con él. Mi última aplicación seria fue una base de datos en Access a la que se hacían consultas y modificaciones desde un cliente remoto, todo ello a través de sockets. Al principio lo vi muy complicado, pero luego fue bastante sencillo (así fue que me saqué un 8.5 en esa asignatura casi sin esfuerzo).

Mis próximos proyectos son hacer lo mismo pero con una base de datos SQL, crearme un chat y aprender a programar Java para móviles. Yo utilizo Eclipse (soy usuario Linux), ¿alguno sabe darme alguna orientación para empezar en el tema de J2ME?

Saludos.
cracker_ct escribió:Vaya!!! Resulta que hay un hilo oficial de Java y yo sin enterarme!!

Me gusta mucho programar, y con Java encontré un filón, se puede hacer prácticamente cualquier cosa con él. Mi última aplicación seria fue una base de datos en Access a la que se hacían consultas y modificaciones desde un cliente remoto, todo ello a través de sockets. Al principio lo vi muy complicado, pero luego fue bastante sencillo (así fue que me saqué un 8.5 en esa asignatura casi sin esfuerzo).

Mis próximos proyectos son hacer lo mismo pero con una base de datos SQL, crearme un chat y aprender a programar Java para móviles. Yo utilizo Eclipse (soy usuario Linux), ¿alguno sabe darme alguna orientación para empezar en el tema de J2ME?

Saludos.


Hola, hace algún tiempo hice algún pinito en J2ME, pero bajo Windows. En Eclipse lo tienes todo muy mascadito con EclipseME (recuerdo que hace un año o así la cosa en x86_64 estaba jodía), y para empezar con tutoriales y demás... la web de sun XD. Ea, google es tu amigo.
x86 64? Mi micro es de 32 bits, eso no sería problema en mi caso... EclipseME es un plugin de Eclipse? Digo yo que si es un plugin se instalará como todos los demás...
cracker_ct escribió:x86 64? Mi micro es de 32 bits, eso no sería problema en mi caso... EclipseME es un plugin de Eclipse? Digo yo que si es un plugin se instalará como todos los demás...

eres un maricaaa [poraki]


Tengo un par de dudas xD

Primera duda:
Introduzco un número en un string y lo convierto en array
       for (cuenta=0;cuenta<intentos;cuenta++){
           cadena=JOptionPane.showInputDialog("Introduce "+y+" números.");
           for(i=0;i<cadena.length();i++){
               arraycadena[i]=Integer.parseInt(cadena.charAt(i)+"");
           }

hasta ahí bien, pero quiero que cuando introduzca el string, sólo me acepte números y un máximo de caracteres (predefinidos por la variable y).


Segunda duda:
He pedido dificultad y vale, pones dificultad y si te equivocas pues vuelve a salir el cuadro... el problema viene cuando pongo fácil o difícil con tilde...
       dificultad=JOptionPane.showInputDialog("Ahora selecciona el nivel de dificultad (Fácil, Normal, Difícil), "+nombre+".");

        while (!dificultad.equalsIgnoreCase("facil") && !dificultad.equalsIgnoreCase("normal") &&!dificultad.equalsIgnoreCase("dificil") )
            dificultad=JOptionPane.showInputDialog("Ahora selecciona el nivel de dificultad (Fácil, Normal, Difícil), "+nombre+".");

        if (dificultad.equalsIgnoreCase("facil")){
...}etc etc

Cómo hago para que también me acepte fácil y difícil con tilde?
JJMD escribió:Primera duda:

prueba con los JTextField-http://www.chuidiang.com/chuwiki/index.php?title=JTextField_que_solo_admite_digitos

JJMD escribió:Segunda duda:

mira haber si puedes ponerlo con los simbolos html para las tildes o poner las dificultades en ingles XD
enano007jr escribió:
JJMD escribió:Primera duda:

prueba con los JTextField-http://www.chuidiang.com/chuwiki/index.php?title=JTextField_que_solo_admite_digitos

JJMD escribió:Segunda duda:

mira haber si puedes ponerlo con los simbolos html para las tildes o poner las dificultades en ingles XD


Gracias pero, no hay otra forma usando el JOptionPane? (es que es pa un trabajo y tampoco es plan de salirme mucho de lo que hemos dado xDD)
Para comparar cadenas yo uso el metodo compareTo() de la siguiente manera:
String cad = "monoculero";
if(cad.compareTo("monoculero")==0){
System.out.println("COINCIDE!!");
}
else{
System.out.println("NO Coincide!!");
}

La comparacion de la cadena se hace simbolo a simbolo, supongo que para las tildes te funcionará.

Por mi parte os cuento mis dudas:
Estoy planteandome la posibilidad de ponerme por mi cuenta a programar bases de datos para las pequeñas empresas que no tienen ningun programa de gestion y funcionan mediante hojas excel (lo tipico), ya que en la ultima en la que me encuentro ya les he creado un par de ellas y les funcionan de maravilla, a parte de otras personas que me han pedido lo mismo y se las he programado.

Por ahora tengo ya la experiencia de trabajar con BBDD Firebird, cuya licencia es libre y se puede utilizar para desarrollar aplicaciones comerciales sin pagar una licencia de uso. Por lo que he leido van mejor que MySQL. A la hora de usar reports utilizo iReport, cuya licencia es GNU.

Mi pregunta es. Una vez creada la aplicación con estas tecnologias (o incluso usando Java WebStart con Apache de por medio) ¿Podría crear algun tipo de licencia, por ejemplo con las Creative Commons para registrar mis aplicaciones?

Un saludo [oki]
monoculero escribió:Para comparar cadenas yo uso el metodo compareTo() de la siguiente manera:
String cad = "monoculero";
if(cad.compareTo("monoculero")==0){
System.out.println("COINCIDE!!");
}
else{
System.out.println("NO Coincide!!");
}

La comparacion de la cadena se hace simbolo a simbolo, supongo que para las tildes te funcionará.


Yo veo mas sencillo usar

if(cadena1.equals(cadena2)) System.out.println("Coincide");
else System.out.println("No Coincide");

el compareTo lo veo mas para comparar cual es mayor o algo del estilo
Buenas,

Vengo de Programar en C y este quadrimestre tengo una assignatura: Programación II i trata de Java y la POO (Programación Orientada a Objetos).

La verdad es que voy algo perdido, llevo las primeras clases i sobre todo con la partes del codigo nuevo: static, public, private, this, get... el profe decia que no seria tan difícil pero me cuesta pillarlo.

alguna recomendación?

gracias, saludos!
por cierto tanto el compareTo como el equals tienen una version que ignora las mayusculas, que sorprendentemente se llama compareToIgnoreCase y equalsIgnoreCase :D
krycek_ escribió:por cierto tanto el compareTo como el equals tienen una version que ignora las mayusculas, que sorprendentemente se llama compareToIgnoreCase y equalsIgnoreCase :D


Ostia, eso no lo sabia! :D , yo habitualmente en ese caso hacia un cadena1.toLower().equals(cadena2.toLower()).

Nunca esta de más saber algo nuevo. Gracias
Realmente para comparar cadenas suele ser más interesante tener un método estático en una clase de utilidad, para que se comprueben todas las cosas necesarias y se eviten nullpointers, algo como esto:

public class Cadenas {
  ...
  ...
  ...
  /**
  * Compara dos cadenas
  * blablabla
  */
  public static boolean iguales(String cad1,String cad2){
    return (cad1 != null && cad2 != null && cad1.trim().equalsIgnoreCase(cad2.trim()));
  }
  ...
}


y para usarla pues evidentemente se le llamaría así:

if(Cadenas.iguales(nombrePasado,nombreEnBBDD)){...}

Evidentemente es muy mejorable, la función puede tener parámetros por defecto por si no queres que haga trim, o por si quieres que te ignore la comparación entre mayúsculas.

Me parece interesante el hilo, entre todos podemos aprender bastante!!

Yo estoy pensando en sacar las certificaciones, me interesa llegar a la de Sun certified java developer, hay alguien que esté en ello? espero que no me cueste mucho, llevo bastante trabajando en java pero nunca se sabe :D
Tengo un pequeño problema que supongo que alguno sabrá como solucionar... resulta que yo dibujo cosas sobre un JPanel (rectangulos y tal) y resulta que cuando minimizo y vuelvo a maximizar, el dibujo desaparece (reaparece al hacer click en el panel, pero creo que es simplemente por uno de los eventos asociados).
Agradecería cualquier ayuda ^^U
Deberías de ejecutar el main en un hilo y tu programa en otro y hacer un pack();

Así no te deberían de desaparecer los elementos.
Puyover escribió:Deberías de ejecutar el main en un hilo y tu programa en otro y hacer un pack();

Así no te deberían de desaparecer los elementos.

Uhm... en mi init() (es un applet) hago esto:
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
                  public void run() {
                      createGUI(); //Desde ahi arranca mi programa
                  }
              });

No sé si te referías a eso (estoy muy verde en java :S).
Por otro lado me acabo de encontrar con un problema bastante más importante... mi applet funciona perfecto en eclipse, pero al intentarlo hacer funcionar en un explorador... no hay manera.

Gracias en cualquier caso :)
Offtopic: cómo se hace para poner el código de esa forma que lo ponéis?
cracker_ct escribió:Offtopic: cómo se hace para poner el código de esa forma que lo ponéis?

[*code][*/code] ;)
Vuelvo a la carga con mis dudas xD.
Como ya he comentado antes, parece que los navegadores se niegan a ejecutar mi applet, y despues de depurar algunos fallos "tontos" (como que el applet no podía estar en un path con espacios, o algo asi ¬_¬ ) me encuentro con el siguiente error (en la consola de java):
Exception in thread "AWT-EventQueue-3" java.security.AccessControlException: access denied (java.io.FilePermission icons/nuevaventana.png read)
   at java.security.AccessControlContext.checkPermission(Unknown Source)
   at java.security.AccessController.checkPermission(Unknown Source)
   at java.lang.SecurityManager.checkPermission(Unknown Source)
...blabladelmismotipo...

Tiene toda la pinta de que tiene que ver con permisos (lo sé, no hace falta ser muy listo para darse cuenta XD) pero no tengo ni la más remota idea de como arreglarlo (es la primera vez que hago un applet ^^U).
Sugerencias? [+risas]

Gracias por adelantado!

cracker_ct escribió:
gracias xDD

De nada hombre xD

EDITO: Solucionado, resulta que tenía que firmar el applet ^^U
Deberías cambiar los permisos de los archivos que quieras leer a 744.

Un saludo.
Puyover escribió:Deberías cambiar los permisos de los archivos que quieras leer a 744.

Un saludo.
Gracias, al final lo que resultaba era que tenía que firmar el applet ^^U
Tengo un problemilla... Estoy intentando hacer un programa que me calcule las raices de una función mediante el método de newton y vale, funciona perfectamente... si no fuera por un pequeño detalle.

Os pongo el código y una captura del error:
for (i = 0; i < 21; i++) {
            expresionO = funcion(s);
            expresionDerivada = derivada(s);

            expresionS = new Format("%.2E").format(expresionO);
            expresionDS = new Format("%.2E").format(expresionDerivada);

            if (i < 10) {
               buffer += i + ".  " + formatea.format(s) + "      "
                     + expresionS + "\t" + expresionDS + "\n";
            } else {
               buffer += i + ". " + formatea.format(s) + "      "
                     + expresionS + "\t" + expresionDS + "\n";
            }

            sant = s;
            s = (Double) (s - expresionO / expresionDerivada);

            salidaArea.setText("");

            if (s == sant) {
               if (i < 10) {
                  buffer += i + 1 + ".  " + formatea.format(s) + "      "
                        + expresionS + "\t" + expresionDS + "\n";
               } else {
                  buffer += i + 1 + ". " + formatea.format(s) + "      "
                        + expresionS + "\t" + expresionDS + "\n";
               }
               break;
            }

Imagen
Como veis en las dos últimas líneas f(s(n)) vale 0.00E+000 cuando debería de valer 4.44E-16 y la cosa es que las demás operaciones las hace bien el cachondo ¬_¬

He de decir que uso dos librerías externas: JEP (Java Expresion Parser) y Format, que sirven para reconocer expresiones matemáticas y formatear la salida respectivamente. Esas funcionan perfectamente y ahí no está el problema porque hasta con un println simple me muestra 0.0000000000000000 -.-U

Y por mas que le doy vueltas no caigo en el error y me está sacando ya de quicio cawento

A ver si podéis iluminarme >.<
Para q usas los if (los de i<10) si luego le asignas lo mismo a buffer, tanto en la parte del if como el la del else?

Salu2
Na, lo del if-else es una tontería que uso para sangrar la salida y que quede mas bonito xD
El error puede estar en que ese numero es menor que el Numero Positivo Minimo del tipo float y por eso no te lo pueda mostrar.

un saludo
Jonri escribió:El error puede estar en que ese numero es menor que el Numero Positivo Minimo del tipo float y por eso no te lo pueda mostrar.

un saludo

Mmmm si te refieres al ámbito de los float... no es eso, ya que si muestro una serie con 300 términos por ejemplo el 299 y el 300 no me los muestra, es siempre los dos últimos >.<
¿Alguien maneja JSF por aquí?

Me sucede una cosa extrañísima, yo quiero validar un inputtext para que la longitud mínima sea 1, pongamos que lo pongo de la siguiente manera:
<h:inputText id="usuario" value="#{beangestionado.usuario}">
<f:validateLength minimu="1"/>
</h:inputText>
...
<td><h:messages for="usuario"></td>


Y si le pincho al botón, no me genera ninguna excepción ni nada. Hace la petición para la que está programada la app (insertar un user y pwd en la bd) y lo inserta con dos cojones en la BD con sus respectivos campos vacíos...

Para usar los validadores implícitos, ¿hay que definir alguna regla en el faces-config o en algún sitio? Uso netbeans 6.8 y el plugin del jsf me lo baje directamente desde el netbeans.

ByEs [buenazo]
hola!
Estoy haciendo una aplicación para un trabajo de clase con i18n y el problema es que al cambiar el idioma no se actualizan las cadenas al empezar lo inicializo todo:
currentLocale = new Locale("en", "US");
languageStrings = ResourceBundle.getBundle("opentype/lang/LanguageBundle", currentLocale);

luego hago esto cuando el usuario cambia el idioma en un JComboBox:
currentLocale = new Locale("es", "ES");
languageStrings = ResourceBundle.getBundle("opentype/lang/LanguageBundle", currentLocale);

yo creia que detectaría el cambio y cambiaría las cadenas de la aplicación, pero no es así, tengo que hacerlo manualmente en cada boton, label,etc volviendo a poner el setText()

Alguna forma de que lo haga automáticamente? a ver si alguien me puede ayudar que me estoy volviendo loco [burla3]

PD: no lo hago a pelo como lo he puesto ahi lo de poner "es" y todo eso, lo tengo guardado en un array pero lo he puesto así aqui para que se vea mas claro [sonrisa]
Puyover escribió:Tengo un problemilla... Estoy intentando hacer un programa que me calcule las raices de una función mediante el método de newton y vale, funciona perfectamente... si no fuera por un pequeño detalle.

Os pongo el código y una captura del error:
for (i = 0; i < 21; i++) {
            expresionO = funcion(s);
            expresionDerivada = derivada(s);

            expresionS = new Format("%.2E").format(expresionO);
            expresionDS = new Format("%.2E").format(expresionDerivada);

            if (i < 10) {
               buffer += i + ".  " + formatea.format(s) + "      "
                     + expresionS + "\t" + expresionDS + "\n";
            } else {
               buffer += i + ". " + formatea.format(s) + "      "
                     + expresionS + "\t" + expresionDS + "\n";
            }

            sant = s;
            s = (Double) (s - expresionO / expresionDerivada);

            salidaArea.setText("");

            if (s == sant) {
               if (i < 10) {
                  buffer += i + 1 + ".  " + formatea.format(s) + "      "
                        + expresionS + "\t" + expresionDS + "\n";
               } else {
                  buffer += i + 1 + ". " + formatea.format(s) + "      "
                        + expresionS + "\t" + expresionDS + "\n";
               }
               break;
            }

Imagen
Como veis en las dos últimas líneas f(s(n)) vale 0.00E+000 cuando debería de valer 4.44E-16 y la cosa es que las demás operaciones las hace bien el cachondo ¬_¬

He de decir que uso dos librerías externas: JEP (Java Expresion Parser) y Format, que sirven para reconocer expresiones matemáticas y formatear la salida respectivamente. Esas funcionan perfectamente y ahí no está el problema porque hasta con un println simple me muestra 0.0000000000000000 -.-U

Y por mas que le doy vueltas no caigo en el error y me está sacando ya de quicio cawento

A ver si podéis iluminarme >.<


Me autocito diciendo que es la cosa mas rara que me ha pasado en la vida y que solo presenta ese "problema" (lo pongo entre comillas porque por dentro el programa funciona perfectamente y las operaciones las hace correctamente) en las funciones polinomiales del tipo: x + x + x + ... + n (donde n es una constante y las x son variables (da igual cuantas x pongas)).

Aunque viendo esto me hace pensar que puede ser el parser :/
Voy a hacer unas pruebas y edito.

EDITO: Nada, no es el parser. Si meto la fórmula directamente en el código fuente sigue dándome el mismo error. En fin lo dejaré así y ya está -.-U
Buenas unas dudillas:
Estoy haciendo una clase llamada Fecha, y en uno de los métodos me da este error:
private int dias_del_mes() //AQUI ME DICE QUE SE TIENE QUE DEVOLVER UN ENTERO, Y EN TODOS LOS RETURN TENGO ENTEROS :s
   {
      if (mes==4||mes==6||mes==9||mes==11)
      {
         return 30;
      }
      if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)
      {
         return 31;
      }
      if(mes==2)
      {
         bisiesto=es_bisiesto();
         if(bisiesto==true)
         {
            return 29;
         }
         else
         {
            return 28;
         }
      }
   }

Despues tengo otro método que no se muy bien como hacerlo:
String formato_largo()
   {
      Aquí deberia devolver una fecha en formato largo , por ejemplo: 25 del 1 de 2009.
                 ¿Debería crear un nuevo objeto string y guardarlo dentro?
   }


Gracias de antemano ^^
Iverson88 escribió:...


Sobre tu primer problema, es fácil.

Todo método necesita un return que vaya a ser llamado con un 100% de seguridad.

Si tienes un método en plan:

int metodo(int a)
{
    if (a > 20)
    {
        return 20;
    }
}


si a es mayor de 20 devolverá 20, si no, no devolverá nada y como ya dije, tiene que tener un return que se vaya a ejecutar al 100% o mejor dicho, un return que esté fuera de toda condición (if).

ejemplo b:

int metodo()
{
    if (true)
    {
        return 20;
    }
}


seguirá estando mal, aunque siempre entre en el if y siempre devuelva 20, necesita un return fuera del if.

En tu caso, aunque termine entrando en un if tarde o temprano, java (quien dice java dice c#) requiere que tengas un return fuera de todo if...

puedes poner abajo del todo pues un:

return -1;


Como diciendo que no devolvió nada válido.


Sobre tu segunda pregunta, no idea, no manejo de java.
Gracias FOX, era eso :P
Bueno tengo otro problema (aparte de los del anterior mensaje).

Tengo una clase principal, que leer por teclado una cadena String, y que formar otra con las iniciales de palabras. Tengo hecho para localizar los espacios, por lo tanto si despues de un espacio va otra cosa que no es un espacio se puede considerar una inicial no? El código es el siguiente:

int longitud;
      int i;
      int [] posicion=new int [35];
      
      String cadena1=Terminal.leeCadena("Introduce nombre y apellidos:");
      String cadena2="";
      
      longitud=cadena1.length();
      for(i=0;i<longitud;i++)
      {
      posicion[i]=cadena1.indexOf(" ",i);
      }
      
      for(i=0;i<longitud;i++)
      {
         if(posicion[i]!=-1)
         {
            if(posicion[i+1]!=posicion[i])
            {
            System.out.println(posicion[i]);
            }
         }
      }

En el System.out.println podría cambiarlo por un condicional que controlase si lo siguiente es o no un espacio no? Una vez hecho eso procedo a mandar el carácter a otra cadena, es aqui la cuestión, existe algún método?
Iverson88 escribió:Gracias FOX, era eso :P
Bueno tengo otro problema (aparte de los del anterior mensaje).

Tengo una clase principal, que leer por teclado una cadena String, y que formar otra con las iniciales de palabras. Tengo hecho para localizar los espacios, por lo tanto si despues de un espacio va otra cosa que no es un espacio se puede considerar una inicial no? El código es el siguiente:

int longitud;
      int i;
      int [] posicion=new int [35];
      
      String cadena1=Terminal.leeCadena("Introduce nombre y apellidos:");
      String cadena2="";
      
      longitud=cadena1.length();
      for(i=0;i<longitud;i++)
      {
      posicion[i]=cadena1.indexOf(" ",i);
      }
      
      for(i=0;i<longitud;i++)
      {
         if(posicion[i]!=-1)
         {
            if(posicion[i+1]!=posicion[i])
            {
            System.out.println(posicion[i]);
            }
         }
      }

En el System.out.println podría cambiarlo por un condicional que controlase si lo siguiente es o no un espacio no? Una vez hecho eso procedo a mandar el carácter a otra cadena, es aqui la cuestión, existe algún método?


Hay un método llamado "split" que es parte de tu solución, no te digo más porque esto parecen deberes.
Iverson88 escribió:Gracias FOX, era eso :P
Bueno tengo otro problema (aparte de los del anterior mensaje).

Tengo una clase principal, que leer por teclado una cadena String, y que formar otra con las iniciales de palabras. Tengo hecho para localizar los espacios, por lo tanto si despues de un espacio va otra cosa que no es un espacio se puede considerar una inicial no? El código es el siguiente:

int longitud;
      int i;
      int [] posicion=new int [35];
      
      String cadena1=Terminal.leeCadena("Introduce nombre y apellidos:");
      String cadena2="";
      
      longitud=cadena1.length();
      for(i=0;i<longitud;i++)
      {
      posicion[i]=cadena1.indexOf(" ",i);
      }
      
      for(i=0;i<longitud;i++)
      {
         if(posicion[i]!=-1)
         {
            if(posicion[i+1]!=posicion[i])
            {
            System.out.println(posicion[i]);
            }
         }
      }

En el System.out.println podría cambiarlo por un condicional que controlase si lo siguiente es o no un espacio no? Una vez hecho eso procedo a mandar el carácter a otra cadena, es aqui la cuestión, existe algún método?

Puedes usar la clase StringBuffer para construir la cadena a partir de los caracteres con el método append. Declaras el objeto StringBuffer y vas añadiendo al StringBuffer las iniciales (puedes hacer con un bucle que vaya desde i hasta el número de iniciales que tienes) y luego vuelcas el StringBuffer en un String normal.

Como creo que vas a tener problemas sacando el número de iniciales (lo lei antes del edit xDD) creo que podrías arreglarlo en vez de con el bucle del cadena1.indexAt(' ', i); haciendo:
int j = 0;
for(int i = 0; i < longitud; i++) {
    if(cadena1.charAt(i) == ' ') {
        posicion[j] = i;
        j++;
    }
}

Así deberías de tener las iniciales ordenadas y solo se te mostraría una vez y no 4 como antes. Y en j tendrías el número de iniciales.

EDITO: Muy útil ese método FOX, no lo conocía. Con ese le va a ser mucho menos tedioso que con StringBuffer xD

Un saludo!
Puyover escribió:
EDITO: Muy útil ese método FOX, no lo conocía. Con ese le va a ser mucho menos tedioso que con StringBuffer xD

Un saludo!



Hacerlo a mano es bastante pesado, con split lo partes en los espacios y pillas el primer caracter de cada trozo y a huir. Eso si, tu idea del StringBuffer es buena.
769 respuestas
1, 2, 3, 4, 5, 616