2014-01-21 141 views
-1

在這些代碼中,我可以獲得有多少個Job可用(JobCount),並在接下來的JFrame中我想要JobCountJToggleButtton。但JobCount不能正確傳遞。我怎樣才能讓它可以傳遞幀的信息?從JFrames傳遞信息

public class NewJFrame extends javax.swing.JFrame { 

public NewJFrame() { 
    initComponents(); 
} 
    public int PeopleCount; 
public int JobCount; 
public JFrame2 jf2; 

private void PJCountjButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    PeopleCount=(int)(PeopleCountjSpinner.getValue()); 
    JOptionPane.showMessageDialog(null, "peoplecount="+PeopleCount); 
    JobCount=(int)(JobCountjSpinner.getValue()); 
    jf2=new JFrame2(); 
    jf2.setVisible(true); 
    jf2.c1=this; 
    this.setVisible(false); 
} 
public static void main(String args[]) { 
java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 
public class JFrame2 extends javax.swing.JFrame { 

int j; 
public NewJFrame c1 = new NewJFrame(); 

JPanel contentpane; 
JButton show; 
public JButton[] jbarray = new JButton[c1.JobCount]; 
public int array[][] = new int[c1.PeopleCount][c1.JobCount]; 

public JFrame2() { 
    initComponents(); 
    JOptionPane.showMessageDialog(null, "peoplecount="+c1.PeopleCount); 
    this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); 
    this.setBounds(10, 01, 500, 400); 
    this.contentpane = new JPanel(); 
    this.show = new JButton("Show array"); 
    contentpane.add(show); 

    for (j = 0; j < c1.JobCount; j++) { 
     this.jbarray[j] = new JButton("job" + (j + 1)); 
     contentpane.add(jbarray[j]); 
    } 

    this.setContentPane(contentpane); 
    this.setVisible(true); 
}} 
    // Variables declaration - do not modify      
private javax.swing.JSpinner JobCountjSpinner; 
private javax.swing.JButton PJCountjButton; 
private javax.swing.JSpinner PeopleCountjSpinner; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
// End of variables declaration   } 
+4

見(http://stackoverflow.com/a/9554657/418556)通常這種類型的問題的解決方案是使用模態組件,如「JDialog」或「JOptionPane」。 –

+2

_「我怎樣才能讓它可以傳遞幀的信息?」_使用setter或pass通過構造函數 –

回答

0

不要使用Multible的JFrame beccause它是一個不好的做法,你可以使用一個JFrame的,很多的JDialog,如:

private void PJCountjButtonActionPerformed(java.awt.event.ActionEvent evt) {            
PeopleCount=(int)(PeopleCountjSpinner.getValue()); 
JOptionPane.showMessageDialog(null, "peoplecount="+PeopleCount); 
JobCount=(int)(JobCountjSpinner.getValue()); 
JDialog dialog = new CustomConstructor(params.) // here you can creaea your own constructor and pass the needed info. 
dialog.setVisible(true); 
} 
0

說什麼peeskillet是正確的。

private int jobCount; 

public int getJobCount() { 
    return jobCount; 
} 

public void setJobCount(int jobCount) { 
    this.jobCount = jobCount; 
} 

其次:

public class JFrame2() { 
    int passedJobCount = c1.getJobCount(); 
} 

那你是怎麼正確地使用私有變量。欲進一步閱讀,請查看Oracle's Tutorial on Member Declarations

+0

的值是真的。但問題沒有解決。每個類中的jobCount是不同的 – user3212478

+0

因此,創建一個新的JFrame,並再次調用getJobCount()方法。 – Gorbles

+0

我做到了,但jobcount在兩者都不同。我可以將信息從JFrame傳遞給JDialog嗎? – user3212478

0

此外,我認爲,幀之間共享值不是一個好習慣,我會建議,如果真的需要這種方式,只需將jobCount存儲爲整型對象並在需要時存儲其引用。這樣它總是最新的。

如果我明白你的意圖是正確的,你只是想爲每個工作和人員製作一個按鈕控制面板,你可以在一個視圖中完成這一切。 只需將frame1通過滑塊獲取計數,然後動態添加slider.value的按鈕。您可以使用默認的borderlayout並將滑塊向北並將按鈕置於中心。

這個小SSCE應該幫助你走上正軌:?多JFrames,好/壞的做法的用途]

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JSlider; 
import javax.swing.JTextField; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class NewJFrame extends javax.swing.JFrame { 

private static final long serialVersionUID = 1L; 
private JSlider slider; 
private JButton btnNewButton; 
private JDialog d; 
private JTextField text; 

public NewJFrame() { 

    btnNewButton = new JButton("Do"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      d.setVisible(true); 
     } 
    }); 
    getContentPane().add(btnNewButton, BorderLayout.CENTER); 

    slider = new JSlider(); 
    slider.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent e) { 
      text.setText(Integer.toString(slider.getValue())); 
     } 
    }); 

    getContentPane().add(slider, BorderLayout.NORTH); 

    d = new JDialog(); 
    text = new JTextField(); 
    d.getContentPane().add(text); 
    d.pack(); 

    pack(); 
    setVisible(true); 
} 

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 
}