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 |
| |||
| 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 |
| |||
| 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. |