2010-09-16 50 views
1

在下面的代碼示例中,如果用戶更改了JFormattedTextField的內容,然後按下Enter,則該對話框應該像按下OK按鈕一樣操作。但這需要按Enter輸入兩個爲什麼我必須按下輸入TWICE這個JFormattedTextField來激活JDialog的默認按鈕?

簡單的香草JTextField始終如我所願 - 改變文本,然後按下Enter即可立即激活OK按鈕。

這在Mac OS X 10.6中使用當前的Mac Java更新1.6.0_20。

這是一個解決方法嗎?這是一個Mac特定的問題?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.text.NumberFormat; 
import java.text.ParseException; 

public class ScratchSpace { 


    public static void main(final String[] args) throws ParseException { 
     final JDialog dialog = new JDialog((Frame) null, "Test", true); 
     dialog.setLayout(new FlowLayout()); 

     dialog.add(new JLabel("text field: ")); 
     dialog.add(new JTextField(20)); 

     dialog.add(new JLabel("formatted text field: ")); 
     final JFormattedTextField formattedTextField = new JFormattedTextField(NumberFormat.getIntegerInstance()); 
     formattedTextField.setValue(42); 
     formattedTextField.setColumns(20); 
     dialog.add(formattedTextField); 

     final JButton okButton = new JButton(new AbstractAction("OK") { 
      public void actionPerformed(ActionEvent e) { 
       dialog.dispose(); 
      } 
     }); 

     dialog.add(okButton); 
     dialog.getRootPane().setDefaultButton(okButton); 
     dialog.pack(); 
     dialog.setLocationRelativeTo(null); 
     dialog.setVisible(true); 
    } 

} 

回答

1

添加此代碼解決了這個問題,

formattedTextField.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     dialog.dispose(); 
    } 
}); 
0

這並沒有解決我的問題。但是,對於我來說問題解決方案似乎更爲簡單:

 private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { 
    add(jTextField1);   //this reacts after the "ENTER" gets pressed 
    jButton1.doClick();  //this activates the button 
    jTextField1.setText(""); //this removes the text from a text-field 
    jTextField1.grabFocus(); //this sets a cursor within a text-field 
    } 
相關問題