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