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

时间:2015-02-22 19:32:33

标签: java user-interface progress-bar netbeans-8

我试图通过math1a设置math1a和math2a中进度条的值,但是只设置了math1a中进度条的值,而math2a类中的进度条没有。我尝试对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                   
}

1 个答案:

答案 0 :(得分:0)

connectActionPerformed中,您创建math2a的实例并使其可见,这是屏幕中的窗口...

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

}

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

就个人而言,我都不这样做。相反,我会使用math1amath2a之间共享的某种模型,这样可以math1a更新模型并使用{{3} },模型会通知math2a,然后就可以更新它的进度条。

您可能希望阅读Observer Pattern,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码