Я не могу .setText(...)
для JTextField
вне класса, который создает графический интерфейс. Я очень смущен и чувствую, что чего-то не хватает. Мне нужно немного помощи здесь.
Вот что я делаю:
В классе (называемом MainClass
) я создаю экземпляр класса, который создает мой графический интерфейс
TestText gui = new TestText();
с конструктором, который устанавливает настройки по умолчанию (JTextField
и кнопка со слушателем). Затем я вызываю сеттер, который я написал, и передаю ему строку, которая должна установить текст JTextField
:
gui.setText("new");
Но "new"
не отображается в графическом интерфейсе.
Я знаю, что мой сеттер работает из класса, потому что, если я сделаю вызов сеттеру с помощью кнопки, которую я создал в графическом интерфейсе, изменения появятся в графическом интерфейсе.
То, что меня действительно смущает, таково: если я вызываю свой метод getter непосредственно перед моим инструментом, он возвращает старое значение. Затем, если я вызываю метод получения снова после вызова метода установки, он возвращает новое значение, в то время как графический интерфейс продолжает показывать старое значение. Я подумал, что, возможно, он просто не перерисовывает графический интерфейс, поэтому я попробовал все виды перестановок .invalidate()
, .validate()
, .update()
и .repaint()
, все из MainClass
и изнутри сеттера. Но никто ничего не сделал.
Возможно ли, что у меня есть 2 разных экземпляра графического интерфейса, и я редактирую только один из них?
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestText {
private JTextField textField;
private JButton button;
private JPanel frame;
JFrame jFrame;
public void setText(String text) {
textField.setText(text);
}
public String getText() {
return textField.getText();
}
public TestText() {
this.textField.setText("98.6");
this.jFrame = new JFrame("TestText");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setText("new (button)");
}
});
}
public void setData(TestText data) {
data.setText("new (setData)");
}
public void getData(TestText data) {
}
public boolean isModified(TestText data) {
return false;
}
public void createGui(String[] args) {
jFrame.setContentPane(new TestText().frame);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setVisible(true);
}
}
и вот основной класс, из которого я пытаюсь создать графический интерфейс:
public class MainClass {
public static void main(String[] args) {
TestText gui = new TestText();
gui.createGui(null);
System.out.println(gui.getText());
gui.setData(gui);
System.out.println(gui.getText());
gui.setText("new (MainClass)");
System.out.println(gui.getText());
}
}