sirve - ¿Para qué se usan java.awt.Component.getName() y setName()?
metodos de clase awt (9)
Además, dado que creo que java.awt.Component es un objeto pesado en X, programas como xwininfo y xwd podrían permitirte 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.
¿Para qué se utiliza java.awt.Component.getName()
? Siempre parece ser null
en las aplicaciones que construyo con NetBeans. Estoy pensando en almacenar algún texto de ayuda por componente en él; no quiero usar la información sobre herramientas, tengo otro panel donde mostraré el texto de ayuda.
Component.setName (..) se usa principalmente en el JDK por las clases de implementación de apariencia para establecer cadenas similares a ID para cada componente, por ejemplo, BasicOptionPaneUI podría llamarlo en un componente de botón para establecer su nombre en "OptionPane.button".
El método getName () se utiliza en los métodos toString () al establecer los nombres de los componentes secundarios dentro de un Componente compuesto / principal 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.
Entonces, si no dependes de ninguno de los usos anteriores de getName (), puedes intentar usarlo para tus mensajes de ayuda, aunque yo no lo recomendaría.
Tal vez deberías reconsiderar tu diseño? Use el nombre para hacer una búsqueda en un hashmap que carga el texto de ayuda de un paquete de recursos.
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.
- Mire aquí cómo usar el panel de vidrio.
- La página web de Jan Newmarch sobre el uso de paquetes de recursos fue muy útil.
- La respuesta de Kevin Riff me ayudó a descubrir cómo encontrar mi paquete de recursos.
Uf. Solo 2 días de dinking alrededor. Finalmente estoy empezando a acostumbrarme a Java :)
No lo he visto usado para nada 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.
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ó.
Esto es lo que 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;
}
}
FEST usa el nombre de un Componente para identificarlo en los casos de prueba.
El método component.getName()
se usa 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 un Listener
.
Ejemplo:
public void someMethodOfsomeListener(SomeEvent e){
if (e.getComponent().getName().equals(component.getName())
//do stuff...
}
Tenga en cuenta que debe establecer explícitamente el nombre del componente; de lo contrario, devolverá null
.
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;
}