2 поля ввода, отображающие одно и то же - PullRequest
2 голосов
/ 09 февраля 2009

Немного странно.

Я хочу иметь JTextField, в котором пользователь будет вводить строку. Однако при наборе текста я бы хотел, чтобы этот текст автоматически печатался в другом JTextField в режиме реального времени.

Я не уверен, возможно ли это, потому что я не могу вспомнить, чтобы какое-либо приложение делало это.

Кто-нибудь еще видел что-то подобное раньше?

На самом деле, теперь, когда я немного открываю глаза, я вижу, что stackoverflow это делает.

Есть ли известные способы реализации на Java?

Ответы [ 5 ]

8 голосов
/ 09 февраля 2009

Возможно, вы сможете задать для полей один и тот же экземпляр документа. Для документа вы можете использовать один из классов, которые предоставляет Swing, или вы можете расширить свой собственный. Документ представляет собой модель текстового поля.

В качестве альтернативы вы можете использовать слушателей для обновления. Есть много вещей, которые вы можете слушать, и это зависит от ваших потребностей, что подходит лучше всего. Вы можете прослушивать документ, вы можете слушать события клавиатуры и мыши, вы можете прослушивать события действия. (События действий происходят в таких полях при нажатии клавиши ввода или при потере фокуса.)

6 голосов
/ 09 февраля 2009

Подход "тот же документ" - это путь.

Вот пример кода на 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()
3 голосов
/ 09 февраля 2009

Добавьте ActionListener, так как это будет отвечать за любое действие, изменяющее текст (не только нажатие клавиш, но и управляемая мышью вырезка-вставка). Код не проверен ...

// changing textField1 updates textField2
textField1.addActionListener(new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {
        textField2.setText(textField1.getText());
    }
});
1 голос
/ 09 февраля 2009

Вы можете добавить прослушиватель действий для разблокированного действия ключа 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());
   }
0 голосов
/ 09 февраля 2009

Вы можете использовать интерфейс KeyListener, и при каждом событии keyTyped вы копируете текст в поле «duplicate».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...