【问题标题】:Updating TextField from different class than GUI从不同于 GUI 的类更新 TextField
【发布时间】:2019-10-07 13:28:00
【问题描述】:

我正在尝试从不同的类更新 GUI。每次我尝试在不同的类上调用该方法时,它都不起作用,但如果我在 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");
        }
}

我也尝试将代码放在同一个线程上,但这似乎也不起作用。

【问题讨论】:

    标签: java swing class user-interface


    【解决方案1】:

    Test7 是 JPanel。它在您的 main 方法中添加到 JFrame。当您调用Class.start() 时,您会创建新的Test7。这个新的 JPanel 与之前添加到 JFrame 的 JPanel 无关,因此它甚至不可见。

    您的 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");
    
        }
    }
    

    Andrew 的 cmets 也值得考虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多