您可以使用一鍵收聽。您只需使用下面的代碼將密鑰偵聽器添加到這兩個字段。你需要其他事件的原因是它會拋出錯誤,除非你在代碼中包含它們。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CreateGrid
{
JFrame thisframe;
JFormattedTextField jFormattedTextField1, jFormattedTextField2;
public CreateGrid()
{
GridLayout thislayout = new GridLayout(0,2);
thisframe = new JFrame();
thisframe.setLayout(thislayout);
jFormattedTextField1 = new JFormattedTextField();
jFormattedTextField2 = new JFormattedTextField();
jFormattedTextField1.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
JFormattedTextField textField = (JFormattedTextField) e.getSource();
String text = textField.getText();
jFormattedTextField2.setText(text);
}
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
}
});
jFormattedTextField2.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent e)
{
JFormattedTextField textField = (JFormattedTextField) e.getSource();
String text = textField.getText();
jFormattedTextField1.setText(text);
}
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
}
});
thisframe.add(jFormattedTextField1);
thisframe.add(jFormattedTextField2);
thisframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisframe.setVisible(true);
thisframe.pack();
}
public static void main(String args[])
{
new CreateGrid();
}
} 我已經測試了這一點,它完美的作品,你鍵入一個場什麼都將顯示在其他您所輸入的。
我沒有想到DocumentListener會爲我工作,因爲我使用的是JFormattedTextField對象,而我想要複製的不僅僅是顯示的文本(我可以通過使用同一個文檔來完成),但是價值本身,一旦它被驗證。此外,我想我認爲調用setText()會觸發一個DocumentEvent,所以我不能在兩個方向上使用它。那是不正確的? – cmolodo 2013-02-20 13:55:31
僅使用'setText()'而不是使用'Document'操作,'DocumentListene'r沒有被指定爲將事件觸發到'Document',然後必須使用'AbstractDocument'或'DocumentFilter' – mKorbel 2013-02-20 14:19:39