JTextField con nombres que varien

Iniciado por carmen77, 17 Octubre 2010, 20:33 PM

0 Miembros y 2 Visitantes están viendo este tema.

carmen77

hola, queria preguntar una duda sobre programacion en eclipse con el lenguaje java.
es para un pasatiempo, quiero crear una tabla de n * n casillas cuyo n sera un numero

introducido por el jugador. para hacer la interfaz grafica quiero crear JTextField,

pero tiene que ser un numero variable de ellos, ya que dependera de numero de

casillas que tenga... seria algo asi
for(int fila=0; fila<longitud; fila++){
   for(int col=0; col<longitud; col++){
      JTextField nombre;
      ...
   }
}
donde pone JTextField nombre, quiero poner algo como nombre00 (fila 0, col 0),

nombre26 (fila 2, col 6).
bueno, espero haberme explicado mas o menos... alguien tiene alguna idea de como

se puede hacer? un saludo y gracias

Debci

Podrias o bien hacerlo con arrays de dichos componentes, o bien ir creando instancias de dicho objeto de manera dinamica osea:
Código (java) [Seleccionar]

for(int filas = 0; filas < 15; filas++) {
new JTextField
}


Al menos eso deduzco de tu codigo, porque no entiendo muy bien lo que pides.

Saludos

carmen77

pero si pongo

for(int filas = 0; filas < 15; filas++) {
   JTextField nombre = new JTextField
}

aunque me cree todos los JTextField, al tener el mismo nombre solo me deja consultar y modificar el ultimo.
yo quiero hacer algo parecido a esto:

for(int fila=0; fila<3; fila++){
       String s= "d" + fila;
mostrar(s);
}

pero en vez de que haga: -> mostrar(s) <- quiero crear un nuevo JTextField que tenga como nombre s. no se si me habre explicado algo mejor... muchas gracias por contestar

Debci

Cita de: carmen77 en 17 Octubre 2010, 21:04 PM
pero si pongo

for(int filas = 0; filas < 15; filas++) {
   JTextField nombre = new JTextField
}

aunque me cree todos los JTextField, al tener el mismo nombre solo me deja consultar y modificar el ultimo.
yo quiero hacer algo parecido a esto:

for(int fila=0; fila<3; fila++){
       String s= "d" + fila;
mostrar(s);
}

Por eso he sugerido que lo creases sin encapsularlo en un objeto :)

Saludos
pero en vez de que haga: -> mostrar(s) <- quiero crear un nuevo JTextField que tenga como nombre s. no se si me habre explicado algo mejor... muchas gracias por contestar

1mpuls0

Hola, creo que intentas hacer eso.

Código (java) [Seleccionar]

import javax.swing.JFrame;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.FlowLayout;
import javax.swing.WindowConstants;
import java.awt.Dimension;

public class DemoJTextField extends JFrame implements ActionListener {

private int n;
private JPanel panel;
   
    public static void main(String[] args) {
DemoJTextField djtf = new DemoJTextField();
djtf.setVisible(true);
djtf.setLocationRelativeTo(null);
    }
   
    public DemoJTextField() {
        initComponents();
    }
   
    private void initComponents() {

        panel = new JPanel();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("JTextFields");
        setResizable(false);
        getContentPane().setLayout(new FlowLayout());

        panel.setPreferredSize(new Dimension(500, 500));
       
        int n = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingresa un numero entero","Entrada",1));
       
        panel.setLayout(new GridLayout(n, n));

    JTextField campo [][] = new JTextField[n][n];
   
    for(int i=0;i<n;i++) {
    for(int j=0;j<n;j++) {
    campo[i][j]=new JTextField();
    //campo[i][j].setText("JTextField"+i +j);
    setNombreJTextField(campo, i, j);
    campo[i][j].addActionListener(this);
    panel.add(campo[i][j]);
    }
    }

        getContentPane().add(panel);
        pack();
    }
   
    private void setNombreJTextField(JTextField campo[][], int i, int j) {
    String nombreJTF="";
    try {
    nombreJTF = JOptionPane.showInputDialog(null,"Escriba un nombre para el JTF","Nombre JTF",1);
    if((nombreJTF!= null) && (nombreJTF.length() > 0)){
    campo[i][j].setText(nombreJTF);
    }
   
    }
    catch(Exception e) {
    e.printStackTrace();
    }
   
    }   
   
    public void actionPerformed(ActionEvent e) {
    System.out.println(e.getActionCommand());
}
}


Le faltan muchas cosas, como:
Validar si se introdujo un dato y si ese dato es entero.
En caso de que tú quieras colocar los nombres a los JTF, verificar que no existan nombres repetidos.


Espero que te sirva.

Saludos.
abc

Leyer

No es posible lo que quieres hacer.