2012-03-08 99 views
16

我有一個JFrame,上面有三個JButton。我已將txtSearch(一個JTextField組件)設置爲在加載JFrame時具有焦點。其中一個按鈕被設置爲默認按鈕。這是我的代碼:當輸入鍵被按下時,JFrame中的默認按鈕不會觸發

private void formWindowOpened(java.awt.event.WindowEvent evt) 
{ 
    // btnRefresh.setMnemonic(KeyEvent.VK_R); // Even if this line 
               // is not commented, but 
               // still the event wouldn't fire. 
    this.getRootPane().setDefaultButton(btnRefresh); 
} 

當它加載,按鈕剛選擇,但它確實沒有當輸入被按下鍵。我如何正確實施它?

btnRefresh.addActionListener(new java.awt.event.ActionListener() { 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     btnRefreshActionPerformed(evt); 
    } 
}); 

private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {           
    JOptionPane.showMessageDialog(this, "Pressed!"); 
    // Other codes here (Replace by JOptionPane) 
} 
+0

我發現最簡單的方法是調用requestFocusInWindow()之後,可以看到JFrame設置一個默認按鈕。希望這可以幫助某人。 – GeriBoss 2014-07-11 11:23:56

回答

10

什麼成分具有當JFrame上來重點是什麼?我問,因爲有些組件「吃」了Enter鍵事件。例如,一個JEditorPane將做到這一點。

另外,當您將ActionListener指定爲JTextField時,將調用ActionListener而不是根窗格中的DefaultButton。您必須選擇有ActionListenerDefaultButton,但不能同時爲同一JTextField發射。我相信這也適用於其他組件。

+0

當'JFrame'加載時,我已經設置了'JTextField'來進行聚焦。 – 2012-03-08 02:45:16

+1

正確的分析,而不是一個解決方案:-) @johntotetwoo從你接受這個我認爲它指出它的解決方案 - 你可能會考慮用該解決方案編輯你的問題 – kleopatra 2012-03-08 14:58:17

+0

輝煌..我有我的密碼字段actionListener並沒有弄清楚它是默認按鈕沒有響應的原因。 Thanx – Olu 2016-02-12 04:35:25

0

我不明白你發佈的內容不正確。這是一個很有用的簡單例子。也許它會揭示對你有用的東西。

import java.awt.BorderLayout; 
public class ExampleFrame extends JFrame 
{ 
    private JPanel m_contentPane; 
    private JTextField m_textField; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       ExampleFrame frame = new ExampleFrame(); 
       frame.setVisible(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public ExampleFrame() 
    { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    m_contentPane = new JPanel(); 
    m_contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    m_contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(m_contentPane); 

    m_textField = new JTextField(); 
    m_contentPane.add(m_textField, BorderLayout.NORTH); 
    m_textField.setColumns(10); 

    JButton btnNewButton = new JButton("Default"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton, BorderLayout.CENTER); 

    JButton btnNewButton_1 = new JButton("Not default"); 
    btnNewButton_1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Not default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton_1, BorderLayout.WEST); 
    m_textField.requestFocus(); 
    getRootPane().setDefaultButton(btnNewButton); 
    } 
} 
+1

添加一個actionListener到textField並看看會發生什麼:-) – kleopatra 2012-03-08 17:13:23

+0

你釘了它kleopatra!當我放入ActionListener時,默認按鈕無法觸發。 johntotetwoo,你需要*刪除*動作偵聽器的默認按鈕觸發。 – 2012-03-08 17:33:47

相關問題