Я пытался найти ответ, но у меня не получается. Я довольно новичок в Java. У меня есть 4 класса (1 основной с JFrame и 3 JPanels).
Основной класс создает JFrame и добавляет к нему 3 панели.
Я пытаюсь выполнить обновление JLabel или JTextField на 1 панели (panelA) из ActionEvent на другой панели (panelB).
ActionEvent в panelB запускает метод в panelA, который запускает метод setText () и метод repaint (). Я не могу получить JLabel или JTextField для обновления с новым текстом.
Вот мой код:
App.java
public class App {
public static void main(String[] args) {
JFrame nameFrame = new JFrame("Name Form");
nameFrame.setLayout(new BorderLayout());
nameFrame.setSize(300,150);
nameFrame.setLocationRelativeTo(null);
nameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MiddlePanel middlePanel = new MiddlePanel();
nameFrame.add(middlePanel, BorderLayout.CENTER);
BottomPanel bottomPanel = new BottomPanel();
nameFrame.add(bottomPanel, BorderLayout.SOUTH);
nameFrame.setVisible(true);
}
}
BottomPanel.java
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BottomPanel extends JPanel {
private JLabel welcomeLabel = new JLabel("Old Text");
BottomPanel() {
super(new FlowLayout());
add(welcomeLabel);
}
public void setText(String text) {
welcomeLabel.setText(text);
repaint();
}
}
MiddlePanel.java
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JPanel;
import java.awt.event.*;
import java.awt.Graphics;
public class MiddlePanel extends JPanel {
MiddlePanel() {
super(new BorderLayout());
JButton okButton = new JButton("OK");
okButton.setSize(20, 20);
OKButtonListener okButtonListener = new OKButtonListener();
okButton.addActionListener(okButtonListener);
add(okButton, BorderLayout.EAST);
}
class OKButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
BottomPanel bottomPanel = new BottomPanel();
bottomPanel.setText("New Text");
}
}
}
Спасибо за любую помощь.