2008-10-22 21 views

Respuesta

20

Component.setName (..) se utiliza principalmente en el JDK por las clases de implementación de apariencia para establecer cadenas similares a ID para cada componente, p. BasicOptionPaneUI podría llamarlo en un componente de botón para establecer su nombre en "OptionPane.button".

El getName() se utiliza en los métodos toString() al establecer los nombres de los componentes secundarios dentro de un Componente compuesto/primario y en el código de registro de depuración AWT y Swing. Sospecho que el método getName() también es utilizado por algunos marcos de prueba AWT/Swing.

Así que si no depende de ninguno de los usos anteriores de getName(), puede intentar usarlo para sus mensajes de ayuda, aunque yo no lo recomendaría.

¿Quizás debería reconsiderar su diseño? Use el nombre para hacer una búsqueda en un hashmap que carga el texto de ayuda de un paquete de recursos.

+0

Gracias Herman - vea mi respuesta a continuación para saber cómo lo hice. – JohnnyLambada

6

No lo he visto usado por el framework. Es útil si tiene componentes que se pasan a un método para que pueda preguntar su nombre para decidir cómo manejarlos. Además, muchos marcos de prueba de UI usan esto para permitirle referirse a los componentes por su nombre en los scripts de prueba. No obstante, no veo ninguna razón por la que no puedas usarlo como texto de ayuda.

+3

La usamos para las pruebas de robot/IU. –

+1

También lo usamos para pruebas de robots/UI. – Jason

0

Además, como creo que java.awt.Component es un objeto pesado en X, programas como xwininfo y xwd podrían permitirle especificarlo por su nombre.

Acabo de probarlo con un JFrame, y setName no configuró el nombre de la ventana, la ventana fue nombrada por la cadena que pasé en el constructor. Pero no tengo ningún código de ejemplo solo para probar, así que podría estar equivocado sobre lo que escribí arriba.

1

La respuesta de Herman Lintvelt fue la correcta para mi aplicación.

Creé un paquete de recursos llamado HelpText.properties. Contiene pares nombre = valor. ConfiguroName() d cada uno de mis componentes con el "nombre" del par nombre = valor. Luego usé un getGlassPane() del marco para capturar todos los movimientos del mouse. Cuando un mouse se ejecuta sobre un componente nombrado, busca el nombre en el paquete, muestra la ayuda si está disponible y reenvía el movimiento del mouse junto con el Componente real.

Whew. Solo 2 días de dinking alrededor. Finalmente estoy empezando a acostumbrarme a Java :)

+0

Me alegro de poder ayudar. Disfruta de Java. –

2

El método component.getName() se utiliza principalmente con oyentes. Si configura el nombre de un componente (component.setName(name)) puede llamar a ese componente específico desde un método de Listener.

Ejemplo:

public void someMethodOfsomeListener(SomeEvent e){ 
    if (e.getComponent().getName().equals(component.getName()) 
     //do stuff... 
} 

Tenga en cuenta que usted tiene que establecer explícitamente el nombre del componente, en caso contrario devolverá null.

+0

Si tiene la referencia 'component' en el oyente, puede usar' e.getComponent() == component' también, que es menos propenso a errores. Consideraría usar múltiples oyentes también. – palacsint

+0

Los componentes también pueden tener el mismo nombre. No confunda la prueba anterior para la igualdad de componentes. – Jason

0

Lo uso para manejar oyentes en una sola clase aparte. Recibo como parámetro el componente que contiene mi object.addListener no como un contenedor sino como la clase que contiene ese objeto. Gracias a Vivavinyl por el consejo de poner el nombre primero. Fue útil y funcionó.

0

Esto es lo que yo uso getName() para:

Frame[] frames = JFrame.getFrames(); 

    for (int i = 0; i < frames.length; ++i) { 

     //get the frame 
     Frame frame = frames[i]; 

     if (frame.getName().equals(frameName)) { 

      //make the frame visible 
      frame.setVisible(true); 

      //focus the frame 
      frame.requestFocus(); 

      //found 
      return; 

     } 

    } 
2

FEST utiliza el nombre de un componente para identificarla en los casos de prueba.

-1

He buscado muchas respuestas para obtener el nombre y creo que esta es la única solución fácil

public static void main(String[] args) { 
    ActionListener actionListener = new ActionListener() { 
     public void actionPerformed(ActionEvent actionEvent) { 
      String name = actionEvent.getSource().toString(); 
      UserReaction(ObjectName.getComponentVariableName(name), "null"); 
     } 
    }; 
    Button calculate_btn = new Button("Calculate"); 
    calculate_btn.setName("Calculate"); 
    calculate_btn.addActionListener(actionListener); 
} 

private static void UserReaction(String objectName) { 
    if (objectName.equals("Calculate")) { 
     //do something;   
    } 
}static public String getComponentVariableName(String name) { 
    String res = (name.substring(name.indexOf("[") + 1)); 
    res = res.split(",")[0]; 
    return res; 
} 
+0

Esto no responde la pregunta en absoluto? –

Cuestiones relacionadas