2个输入字段显示相同的内容

时间:2009-02-09 19:44:43

标签: java swing

有点奇怪。

我想要一个JTextField,用户将在其中键入一个字符串。但是,在键入时,我希望该文本能够实时自动打印到另一个JTextField。

我不确定这是否可行,因为我不记得看到任何应用程序都这样做了。

之前有人见过这样的事吗?

实际上,现在我睁开眼睛,我看到stackoverflow会这样做。

是否有任何已知的Java实现方法?

5 个答案:

答案 0 :(得分:8)

您可以为字段提供相同的文档实例。对于文档,您可以使用swing提供的其中一个类,也可以扩展自己的类。该文档是文本字段的模型。

或者,您可以使用侦听器进行更新。你可以听很多东西,这取决于你最需要的东西。您可以收听文档,可以收听键盘和鼠标事件,还可以收听动作事件。 (按Enter或焦点丢失时,此类字段中会发生动作事件。)

答案 1 :(得分:6)

“同一文件”方法是可行的方法。

以下是Groovy中的一些示例代码(将Java翻译为读者留下的练习):

import javax.swing.*
import java.awt.FlowLayout

f = new JFrame("foo")
t1 = new JTextField(10)
t2 = new JTextField(10)
t2.document = t1.document
f.contentPane.layout=new FlowLayout()
f.contentPane.add(t1)
f.contentPane.add(t2)
f.pack()
f.show()

答案 2 :(得分:3)

添加ActionListener,因为这会响应更改文本的任何操作(不仅是按键,还包括鼠标驱动的剪切粘贴)。代码未经测试......

// changing textField1 updates textField2
textField1.addActionListener(new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {
        textField2.setText(textField1.getText());
    }
});

答案 3 :(得分:1)

您可以为jTextField的键释放操作添加动作侦听器。 例如:

  jTextField1.addKeyListener(new java.awt.event.KeyAdapter() 
    {
      public void keyReleased(java.awt.event.KeyEvent evt) 
      {
       jTextField1KeyReleased(evt);
      }
     });

  private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) 
   {       
    jTextField2.setText(jTextField1.getText());
   }

答案 4 :(得分:0)

您可以使用KeyListener界面,并在每个keyTyped事件中将文本复制到“重复”字段。