JTextField setDocument перезаписывает текст - PullRequest
0 голосов
/ 23 октября 2019

Я создал JTextField (либо с настройкой текста после создания, либо в конструкторе). После этого я добавил Document (setDocument) в текстовое поле и удивился, почему текстовое значение JTextField было пустым.

Пример:

JTextField field = new JTextField();
field.setText(textValue); // or instead setting the text in the constructor
field.setDocument(new TestDocument());
// text is no empty

Настройка документа до того, как текст исправит это полностью. Мне просто интересно, почему это происходит. Это потому, что ранее заданный текст не был обработан в соответствии с документом?

1 Ответ

1 голос
/ 23 октября 2019

Компоненты Swing работают по модифицированному дизайну Model-View-Controller.

  1. Model (в данном случае Document) содержит данные. Обратите внимание, что для других компонентов Swing Model фактически называется Model. Например, у вас есть TableModel для JTable или ListModel для JList.
  2. View-Controller является компонентом JTextField. Задача View - рисовать данные в Model.

Когда вы добавляете текст в текстовое поле, вы действительно обновляете Model. Затем Model уведомляет View, что данные изменились, и текстовое поле перекрашивается.

Итак, если вы добавите текст к Document с помощью метода setText(...) и затем установите новыйDocument к текстовому полю, что касается View, текст для рисования отсутствует.

Почему вы используете пользовательский документ? Как правило, есть лучшие варианты, если вам нужно настроить поведение текстового поля.

...