Обновление TextField из другого класса, чем GUI

Я пытаюсь обновить графический интерфейс из другого класса. Каждый раз, когда я пытался вызвать метод в другом классе, он не работает, но если я делаю это в классе 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");
        }
}

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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");

    }
}

Комментарии Эндрю тоже заслуживают внимания.

Другие вопросы по теме