为什么我不能在另一个 class 中设置进度条的值?

Why can't I set the value of a progress bar in another class?

我试图通过 math1a 设置 math1a 和 math2a 中进度条的值,但只有 math1a 中设置了进度条的值,而 math2a 中的进度条没有设置 class。我尝试对 matha2 进度条使用 set 和 get 方法,但它似乎不让我设置它的值?

////////////////////////////////////////// ////////////////////////////math1 main class//////////// //////////////////////////////////////////////

public class math1 extends javax.swing.JFrame {


public math1() {
    initComponents();
}


@SuppressWarnings("unchecked")
 private void connectActionPerformed(java.awt.event.ActionEvent evt) {                                        

    math1a m1 = new math1a();
    m1.setVisible(true);
    m1.pbStart();

    math2a m2 = new math2a();
    m2.setVisible(true);
}                                       


public static void main(String args[]) {
    /* Set the Nimbus look and feel */
/* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new math1().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton connect;
// End of variables declaration                   
}

////////////////////////////////////////// ////////////////////////////math1a class///////////// ////////////////////////////////////////////////////

public class math1a extends javax.swing.JFrame {


public math1a() {
    initComponents();
}


@SuppressWarnings("unchecked")
math2a m2 = new math2a();

public void pbStart(){
    //attempt 1
    pb1.setValue(100);
    m2.setPB(100);
   m2.pb2.setValue(m2.getPB());
   //attempt 2
   m2.setBar(100);

}

public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new math1a().setVisible(true);
        }
    });
 }

// Variables declaration - do not modify                     
private javax.swing.JProgressBar pb1;
// End of variables declaration                   
}

////////////////////////////////////////// ////////////////////////////math2a class///////////// ////////////////////////////////////////////////////

public class math2a extends javax.swing.JFrame {

private int bar;

public math2a() {
    initComponents();
}

@SuppressWarnings("unchecked")

//attempt 1
public void setPB(int bar){
    this.bar = bar;
}

public int getPB(){
    return this.bar;
}

 //attemp2
 public void setBar(int pb2){
   this.pb2.setValue(pb2);
}

public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new math2a().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
public javax.swing.JProgressBar pb2;
// End of variables declaration                   
}

connectActionPerformed 中创建 math2a 的实例并使其可见,这就是屏幕中的 window...

private void connectActionPerformed(java.awt.event.ActionEvent evt) {                                        

    math1a m1 = new math1a();
    m1.setVisible(true);
    m1.pbStart();

    math2a m2 = new math2a();
    m2.setVisible(true);
}                                       

但在 math1a 中,您创建了 math2a 的第二个实例,它在屏幕上不可见...

@SuppressWarnings("unchecked")
math2a m2 = new math2a();

public void pbStart(){
    //attempt 1
    pb1.setValue(100);
    m2.setPB(100);
   m2.pb2.setValue(m2.getPB());
   //attempt 2
   m2.setBar(100);

}

您要么需要传递您在 connectActionPerformed 中创建的 math2a 的引用,要么只使用您在 math1a 中创建的实例。

就我个人而言,我两者都不做。相反,我会使用某种在 math1amath2a 之间共享的模型,这将允许 math1a 更新模型并通过使用 Observer Pattern,该模型会通知 math2a 然后它可以更新它的进度条。

您可能希望通读 Code Conventions for the Java TM Programming Language,这将使人们更容易阅读您的代码,您也可以更轻松地阅读其他人