我认为这更好。为什么标签文字没有变化?
主类为NewJFrame形式

public class NewJFrame extends javax.swing.JFrame {
        public NewJFrame() {
            initComponents();
            NewJPanel jpanel = new NewJPanel();
            anotherPanel.add(jpanel);
         //there is also a label in this frame outside of the anotherPanel
        }
    }


这是一个JPanel表单。我将此jpanel添加到NewJFrame(anotherPanel)

public class NewJPanel extends javax.swing.JPanel {
        public NewJFrame newJFrame;
            public NewJPanel() {
                initComponents();
                this.setSize(200, 200);
        //there is a button here
            }
   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
                this.newJFrame = newJFrame;
      newJFrame.jLabel1.setText("Need To change the text from here"); // this is not working, text is not changing
            }
        }

最佳答案

您的问题是,在您的JPanel代码中,您正在创建一个与正在显示的JFrame完全不同的新JFrame对象:

public NewJPanel() {
 NewJFrame newfr = NewJFrame();  // *** here ***


因此,调用NewJFrame方法或设置其字段在可视化的GUI上没有可见的效果。

要解决此问题,必须在可行的引用上调用要更改其行为的类的方法,这里是NewJFrame类。因此,您必须将该类的引用传递到您的NewJPanel类中,也许是在其构造函数中,以便NewJPanel类可以在实际显示的NewJFrame对象上调用方法。

例如:

public class NewJPanel extends javax.swing.JPanel {
  private NewJFrame newJFrame;

  // pass in the current displayed NewJFrame reference when calling this constructor
  public NewJPanel(NewJFrame newJFrame) {
    this.newJFrame = newJFrame;
    newJFrame.setMyLabelText("qqqqqq");
  }
}


然后在NewJFrame类中,传递对可视化JFrame对象this的引用:

public NewJFrame() {
  NewJPanel pane= new NewJPanel(this);


最重要的是,甚至不要以为这些人是JFrames或JPanels。只需将它们视为需要相互通信的类的对象,这通常是通过公共方法完成的。对于GUI而言,这与对于非GUI程序而言没有什么不同。

10-06 05:58