Para mi programita en Netbeans:
Al presionar un botón, ¿cómo puedo obtener el JTextfield que tiene el foco activado?
| |||
Respuesta: Obtener componente foco activado Cita: Cuando llegue del curro lo pruebo, tengo que hacer un cast?Componente (JTexfield)unComponente = FocusManager.getCurrentManager().getFocusOwner(); O lo puedo hacer directamente? JTextField unComponente = FocusManager.getCurrentManager().getFocusOwner(); Muchas gracias. Última edición por jorgegetafe; 14/04/2009 a las 02:39 |
| |||
Respuesta: Obtener componente foco activado Tengo algunos problemas, he probado varias cosas y siempre con errores: Primer intento (ERROR: Exception occurred during event dispatching: java.lang.NullPointerException ):
Código:
Component componente = FocusManager.getCurrentManager().getFocusOwner(); if (componente.getName().equals("textTitulo")) JOptionPane.showMessageDialog(this, "Titulo tiene el foco"); Segundo intento (ERROR: Tipos incompatibles):
Código:
if (FocusManager.getCurrentManager().getFocusOwner()).getName().equals(textTitulo.getName()); JOptionPane.showMessageDialog(this, "Titulo tiene el foco"); Tercer intento (ERROR en tiempo de compilación: is abstract, cannot be instantiated )
Código:
Component componente = new Component(); componente = FocusManager.getCurrentManager().getFocusOwner(); if (componente.getName().equals("textTitulo")) JOptionPane.showMessageDialog(this, "Titulo tiene el foco"); Quinto intento: He intentado hacer un cast, para pasar el componente a jtextfield y en tiempo de ejecución me da error de casting. Necesito saber en que JTextfield está el foco para hacer unas cosas u otras... ayuda!!! Muchas gracias. Última edición por jorgegetafe; 14/04/2009 a las 03:34 |
| |||
Respuesta: Obtener componente foco activado He hecho lo que me has dicho y cada vez entiendo menos el tema, ejecuto el siguiente código:
Código:
Y me dice: "class javax.swing.JRootPane". Por dios no se ni lo que es un JRootPane!!! si el foco (¿palito que parpadea no?) está dentro de un JTextField (lo he mirado por si acaso: boton derecho propiedades y aparece: "propiedades de textTitulo [JTextField]")private void copiarActionPerformed(java.awt.event.ActionEvent evt) { try{ if ( (FocusManager.getCurrentManager().getFocusOwner() ) == null ) JOptionPane.showMessageDialog(null, "Da == a null"); else{ if ( (FocusManager.getCurrentManager().getFocusOwner() ) instanceof TextField) JOptionPane.showMessageDialog(null, "!= de null e igual a JTextfield"); else JOptionPane.showMessageDialog(null, (FocusManager.getCurrentManager().getFocusOwner() ).getClass().toString()); } } catch(Exception e){ JOptionPane.showMessageDialog(null, e.getMessage()); } Ayudadme porfa, gracias. Última edición por jorgegetafe; 15/04/2009 a las 02:59 Razón: Errata |
| ||||
Respuesta: Obtener componente foco activado Hola: He estado probando y el método que te he dicho a mí me da el botón (cosa lógica, al pulsarlo el JTextField pierde el foco y lo gana el botón).
Código:
El siguiente trozo de códigopackage com.chuidiang.prueba; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.FocusManager; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class Prueba { /** * @param args */ public static void main(String[] args) { JFrame v = new JFrame(); JTextField tf = new JTextField(10); JButton b = new JButton("pulsa"); v.getContentPane().setLayout(new FlowLayout()); v.getContentPane().add(tf); v.getContentPane().add(b); v.pack(); v.setLocationRelativeTo(null); v.setVisible(true); v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(FocusManager.getCurrentManager() .getFocusOwner()); } }); } }
Código:
va recibiendo los componentes que pierden el foco. Con algo como eso puedes guardar en algún sitio cual es el último JTextField que pierde el foco y usarlo en el botón. No me gusta la solución (parece muy rebuscada).Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { @Override public void eventDispatched(AWTEvent event) { if (event instanceof FocusEvent) { if (((FocusEvent) event).getID() == FocusEvent.FOCUS_LOST) { System.out.println(((FocusEvent) event).getComponent()); } } } }, AWTEvent.FOCUS_EVENT_MASK); Se bueno. |