2013-10-30 52 views
2

在我的表單中,當我在我的鍵盤上按ENTER按鈕時,okAction()方法應該被調用(並且完全調用)。在keyBinding中的焦點導航

我的問題是對焦狀態,當我填寫的文本字段,然後按ENTER鍵,okAction()沒有被調用,因爲重點是第二個文本字段(面板不)。

如何解決這個問題?

public class T3 extends JFrame implements ActionListener { 

JButton cancelBtn, okBtn; 
JLabel fNameLbl, lNameLbl, tempBtn; 
JTextField fNameTf, lNameTf; 

public T3() { 
    add(createForm(), BorderLayout.NORTH); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(400, 500); 
    setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new T3(); 
     } 
    }); 
} 

public JPanel createForm() { 
    JPanel panel = new JPanel(); 
    panel.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "Button"); 
    panel.getActionMap().put("Button", new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      okAction(); 
     } 
    }); 

    okBtn = new JButton("Ok"); 
    okBtn.addActionListener(this); 
    cancelBtn = new JButton("Cancel"); 
    tempBtn = new JLabel(); 
    fNameLbl = new JLabel("First Name"); 
    lNameLbl = new JLabel("Last Name"); 
    fNameTf = new JTextField(10); 
    fNameTf.setName("FnTF"); 
    lNameTf = new JTextField(10); 
    lNameTf.setName("LnTF"); 

    panel.add(fNameLbl); 
    panel.add(fNameTf); 
    panel.add(lNameLbl); 
    panel.add(lNameTf); 
    panel.add(okBtn); 
    panel.add(cancelBtn); 
    panel.add(tempBtn); 

    panel.setLayout(new SpringLayout()); 
    SpringUtilities.makeCompactGrid(panel, 3, 2, 50, 10, 80, 60); 
    return panel; 
} 

private void okAction() { 
    if (fNameTf.getText().trim().length() != 0 && lNameTf.getText().trim().length() != 0) { 
     System.out.println("Data saved"); 
    } else System.out.println("invalid data"); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == okBtn) { 
     okAction(); 
    } 
} 
} 

回答

5

聲明默認鍵爲您的GUI的JRootPane中:

public T3() { 

    //!! ..... etc... 

    setVisible(true); 
    getRootPane().setDefaultButton(okBtn); 
} 

其實用默認的按鈕設置,我不知道你需要使用的鍵綁定。

+0

非常好,謝謝:D! – Sajad

相關問題