Я пытаюсь обновить графический интерфейс из другого класса. Каждый раз, когда я пытался вызвать метод в другом классе, он не работает, но если я делаю это в классе GUI, он работает отлично.
Класс графического интерфейса:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test7 extends JPanel implements ActionListener {
private JButton jcomp1;
private JButton jcomp2;
private JButton jcomp3;
private JTextField jcomp4;
public Test7() {
//construct components
jcomp1 = new JButton("Button 1");
jcomp2 = new JButton("Button 2");
jcomp3 = new JButton("Button 3");
jcomp4 = new JTextField(5);
jcomp1.addActionListener(this);
//adjust size and set layout
setPreferredSize(new Dimension(723, 455));
setLayout(null);
//add components
add(jcomp1);
add(jcomp2);
add(jcomp3);
add(jcomp4);
//set component bounds (only needed by Absolute Positioning)
jcomp1.setBounds(160, 320, 100, 20);
jcomp2.setBounds(340, 320, 100, 20);
jcomp3.setBounds(490, 315, 140, 20);
jcomp4.setBounds(180, 125, 365, 110);
}
public static void main(String[] args) {
JFrame frame = new JFrame("MyPanel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Test7());
frame.pack();
frame.setVisible(true);
}
public void setTextArea(JTextField jcomp4) {
this.jcomp4 = jcomp4;
}
public JTextField getTextArea() {
return this.jcomp4;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jcomp1) {
Class class1 = new Class();
class1.start();
}
}
}
Второй класс:
public class Class extends Test7{
public void start(){
Test7 form = new Test7();
form.getTextArea().setText("nesto");
}
}
Я также пытался поместить код в тот же поток, но это тоже не работает.
Test7
— это JPanel. Он добавляется в JFrame в вашем основном методе. Когда вы вызываете Class.start()
, вы создаете новый Test7
. Этот новый JPanel не связан с JPanel, ранее добавленным в JFrame, поэтому он даже не виден.
Ваш класс Class
не должен ни расширять, ни создавать новый экземпляр Test7
. Вместо этого экземпляр Test7
можно передать в конструкторе Class
:
Class class1 = new Class(this);
class1.start();
Ваш Class
класс:
public class Class {
private final Test7 test;
public Class(Test7 test) {
super();
this.test = test;
}
public void start() {
test.getTextArea().setText("nesto");
}
}
Комментарии Эндрю тоже заслуживают внимания.