Foro sobre Java SE > Obtener nombre del componente
Buenas,
Efectivamente el getName te devuelve siempre "JSpinField":
http://www.toedter.com/en/jcalendar/api/com/toedter/components/JSpinField.html
Lo que tu llamas "nombre de componente" es el "nombre de la variable que en el codigo generado apunta al componente", la cual obviamente no podras obtener recorriendo el array.
Un saludo
JSpinField extiende JPanel, y a los JPanel se les puede asignar un nombre con el método setName de Component.
http://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html
http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#setName(java.lang.String)
Siempre puedes hacer lo que sigue:
JSpinField jsf13b = new JSpinField();
jsf13b.setName("jsf13b");
Con lo que asignas el nombre del identificador del objeto al objeto en sí, como una cadena.
Del código fuente de JSpinField:
public JSpinField(int min, int max) {
super();
setName("JSpinField");
...
Como ves, en el constructor de JSpinField se asigna un nombre por defecto, que es el que te devuelve el getName.
Si tras crear el objeto, asignas tu propio nombre al objeto, como se hace más arriba, getName te devolverá el nombre que le hayas asignado tu, y no el valor por defecto.
Pero de alguna forma asignará el nombre de variable, no? Ese es el que quiero, aunque no sea como componente sino como variable ya que es como se utiliza dicho componente
No, con setName se asigna un texto, no el identificador del componente.
No termino de entender lo que quieres.
Podrías poner un ejemplo con código, aunque sea en pseudo código, pero detallado con lo que tienes y lo que quieres.
Tengo un jspinfield[] llamado ojsf y cada jspinfield que hay tiene un nombre que corresponde con el nombre de una columna en una bbdd. Lo que quiero es recorrerlo con un bucle for y solicitar a la bbdd los datos de esa columna:
For(jspinfield jsf : ojsf){
String str="select " + jsf.nombre + " from tabla;";
}
Tienes que asignar nombres a esos JSpinField, cuando los creas, según los nombres de las columnas de la BD.
public class Test {
public static void main(String[] args) {
JSpinField[] ojsf = new JSpinField[3];
ojsf[0] = new JSpinField();
ojsf[0].setName("columna0");
ojsf[1] = new JSpinField();
ojsf[1].setName("columna1");
ojsf[2] = new JSpinField();
ojsf[2].setName("columna2");
for (JSpinField jSpinField : ojsf) {
String str = "select " + jSpinField.getName() + " from tabla;";
System.out.println(str);
}
}
}
Lo que no puedes usar es el identificador de una instancia de JSpinField como si fuese una cadena de texto, porque es un identificador para el compilador y para la Máquina Virtual.
JSpinField spinField = new JSpinField();
La variable spinField no es un "texto", y no se puede usar como tal. Por eso los componentes de Swing y AWT tienen métodos como getName y setName, para poder asociar un "texto" a cada componente.
Muchas gracias por las respuestas. He encontrado en el apartado de propiedades que puedo asignarle en el momento de la creación el nombre con NetBeans así que ya lo he solucionando.
Gracias a todos.
Si miras el código generado por NetBeans, verás que para cada uno de esos componentes, usa su setName.
Si hubieses dicho, desde un principio, que usabas NetBeans, se te podría haber guiado hacia las propiedades editables del Matisse.
Buenas noches, estoy desarrollando un programa y en él tengo un jspinfield[ ] que contiene 15 filas. Estoy integrando extraerlas a un jspinfield con un bucle for(eso lo hago son problemas) pero quiero obtener el nombre de ese componente para mostrarlo en un cuadro de texto.
Por ejemplo: Tengo un jspinfield llamado jsf13b, pues sacar ese mismo nombre y que en el cuadro de texto ponga jsf13b.
He probado a usar el método .getName() otro en lugar de eso pone el tipo de objeto (jspinfield)