Обновление TextField из другого класса, чем GUI - PullRequest
0 голосов
/ 21 мая 2019

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

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

1 Ответ

2 голосов
/ 21 мая 2019

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

    }
}

Также стоит подумать об комментариях Эндрю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...