Im試圖將多個JPanel
s添加到我的Frame並使它們各自使用GroupLayout
,但出於某種原因,我在Thread main中獲得NullPointerException
或Exception
。我可能會做錯什麼,我該如何解決它?如何在Grouplayout中使用多個JPanel
我會那麼做glayout2 = new GroupLayout(temp2Panel); temp2Panel.setLayout(glayout2); glayout2.setAutoCreateGaps(true); glayout2.setAutoCreateContainerGaps(true);
要製作第二個面板groupplayout並將出現在相同的框架?
public class test extends JFrame {
/**
*
*/
private JLabel testing;
private JLabel lblcode;
private JLabel lblemployeedetails;
private JLabel lblname;
private JLabel lbladdress;
private JLabel lblcity;
private JLabel lblemail;
private JLabel lbltelnumber;
private JLabel lblcellnumber;
private JLabel lblprnumber;
private JLabel lblppe;
private JLabel lblppedate;
private JTextField txtprnumber;
private JTextField txtppe;
private JTextField txtcode;
private JTextField txtname;
private JTextField txtaddress;
private JTextField txtaddress2;
private JTextField txtcity;
private JTextField txtemail;
private JTextField txttelnumber;
private JTextField txtcellnumber;
private Container container1;
private Container container2;
private static final long serialVersionUID = 6666;
private JPanel mainPanel = new JPanel();
private JPanel temp1Panel = new JPanel();
private JPanel temp2Panel = new JPanel();
private GroupLayout glayout;
public test() {
// Frame Parameters
setTitle("test");
setSize(500,500);// Adjust size of the frame/window
setLocationRelativeTo(null);// Adjust open location
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
/*************************************************************
* Properties~Always initialize within the constructor FOOL
*************************************************************/
testing = new JLabel("testing");
lblcode= new JLabel("Code:");
lblemployeedetails= new JLabel("Employee Details:");
lblname= new JLabel("Name:");
lbladdress= new JLabel("Address:");
lblcity= new JLabel("City:");
lblemail= new JLabel("Email:");
lbltelnumber= new JLabel("Tel:");
lblcellnumber= new JLabel("Cell:");
lblprnumber = new JLabel("PR#:");
lblppe = new JLabel("PPE:");
lblppedate = new JLabel("PPE Date:");
txtprnumber= new JTextField();
txtppe= new JTextField();
txtcode= new JTextField();
txtname= new JTextField();
txtaddress= new JTextField();
txtaddress2= new JTextField();
txtcity= new JTextField();
txtemail= new JTextField();
txttelnumber= new JTextField();
txtcellnumber= new JTextField();
//Below adding the 2 other panels to the main outer panel
temp1Panel = new JPanel();
temp1Panel.add(container1);
temp2Panel = new JPanel();
mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(temp1Panel);
mainPanel.add(temp2Panel);
/*************************************************************
* GroupLayout for temp1Panel
*************************************************************/
container1 = getContentPane();
glayout = new GroupLayout(temp1Panel);
temp1Panel.setLayout(glayout);
glayout.setAutoCreateGaps(true);
glayout.setAutoCreateContainerGaps(true);
glayout.setHorizontalGroup(
glayout.createSequentialGroup()
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblprnumber)
.addComponent(lblcode)
.addComponent(lblname)
.addComponent(lbladdress)
.addComponent(lblcity)
.addComponent(lblemail)
.addComponent(lbltelnumber)
.addComponent(lblcellnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(txtprnumber)
.addComponent(txtcode)
.addComponent(txtname)
.addComponent(txtaddress)
.addComponent(txtaddress2)
.addComponent(txtcity)
.addComponent(txtemail)
.addComponent(txttelnumber)
.addComponent(txtcellnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblppe))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(txtppe)
.addComponent(lblemployeedetails))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblppedate))
);
glayout.setVerticalGroup(
glayout.createSequentialGroup()
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblprnumber)
.addComponent(txtprnumber)
.addComponent(lblppe)
.addComponent(txtppe)
.addComponent(lblppedate))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcode)
.addComponent(txtcode)
.addComponent(lblemployeedetails))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblname)
.addComponent(txtname))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lbladdress)
.addComponent(txtaddress))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(txtaddress2))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcity)
.addComponent(txtcity))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblemail)
.addComponent(txtemail))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lbltelnumber)
.addComponent(txttelnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcellnumber)
.addComponent(txtcellnumber))
);
this.setVisible(true);
}//test
/*************************************************************
* Main
*************************************************************/
public static void main(String[] args) {
new test();
}//main
}
編輯3:這是我得到:
Exception in thread "main" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
at javax.swing.GroupLayout.checkParent(Unknown Source)
at javax.swing.GroupLayout.invalidateLayout(Unknown Source)
at java.awt.Container.invalidate(Unknown Source)
at java.awt.Component.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at javax.swing.JComponent.addNotify(Unknown Source)
at javax.swing.JRootPane.addNotify(Unknown Source)
at java.awt.Container.addNotify(Unknown Source)
at java.awt.Window.addNotify(Unknown Source)
at java.awt.Frame.addNotify(Unknown Source)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
編輯4:
public class test extends JFrame {
private static final int COLS = 30;
/**
*
*/
private JLabel testing;
private JLabel lblcode;
private JLabel lblemployeedetails;
private JLabel lblname;
private JLabel lbladdress;
private JLabel lblcity;
private JLabel lblemail;
private JLabel lbltelnumber;
private JLabel lblcellnumber;
private JLabel lblprnumber;
private JLabel lblppe;
private JLabel lblppedate;
private JTextField txtprnumber;
private JTextField txtppe;
private JTextField txtcode;
private JTextField txtname;
private JTextField txtaddress;
private JTextField txtaddress2;
private JTextField txtcity;
private JTextField txtemail;
private JTextField txttelnumber;
private JTextField txtcellnumber;
private static final long serialVersionUID = 6666;
private JPanel mainPanel = new JPanel();
private JPanel temp1Panel = new JPanel();
private JPanel temp2Panel = new JPanel();
private GroupLayout glayout;
private GroupLayout glayout2;
public test() {
// Frame Parameters
setTitle("test");
setSize(500,500);// Adjust size of the frame/window
setLocationRelativeTo(null);// Adjust open location
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
/*************************************************************
* Properties~Always initialize within the constructor FOOL
*************************************************************/
testing = new JLabel("test");
lblcode = new JLabel("Code:");
lblemployeedetails = new JLabel("Employee Details:");
lblname = new JLabel("Name:");
lbladdress = new JLabel("Address:");
lblcity = new JLabel("City:");
lblemail = new JLabel("Email:");
lbltelnumber = new JLabel("Tel:");
lblcellnumber = new JLabel("Cell:");
lblprnumber = new JLabel("PR#:");
lblppe = new JLabel("PPE:");
lblppedate = new JLabel("PPE Date:");
txtprnumber = new JTextField(COLS);
txtppe = new JTextField(COLS);
txtcode = new JTextField(COLS);
txtname = new JTextField(COLS);
txtaddress = new JTextField(COLS);
txtaddress2 = new JTextField(COLS);
txtcity = new JTextField(COLS);
txtemail = new JTextField(COLS);
txttelnumber = new JTextField(COLS);
txtcellnumber = new JTextField(COLS);
//Below adding the 2 other panels to the main outer panel
temp1Panel = new JPanel();
temp2Panel = new JPanel();
mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(temp1Panel);
mainPanel.add(temp2Panel);
/*************************************************************
* GroupLayout for temp1Panel
*************************************************************/
getContentPane().add(temp1Panel);//mainPanel
glayout = new GroupLayout(temp1Panel);
temp1Panel.setLayout(glayout);
glayout.setAutoCreateGaps(true);
glayout.setAutoCreateContainerGaps(true);
glayout.setHorizontalGroup(
glayout.createSequentialGroup()
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblprnumber)
.addComponent(lblcode)
.addComponent(lblname)
.addComponent(lbladdress)
.addComponent(lblcity)
.addComponent(lblemail)
.addComponent(lbltelnumber)
.addComponent(lblcellnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(txtprnumber)
.addComponent(txtcode)
.addComponent(txtname)
.addComponent(txtaddress)
.addComponent(txtaddress2)
.addComponent(txtcity)
.addComponent(txtemail)
.addComponent(txttelnumber)
.addComponent(txtcellnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblppe))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(txtppe)
.addComponent(lblemployeedetails))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lblppedate))
);
glayout.setVerticalGroup(
glayout.createSequentialGroup()
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblprnumber)
.addComponent(txtprnumber)
.addComponent(lblppe)
.addComponent(txtppe)
.addComponent(lblppedate))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcode)
.addComponent(txtcode)
.addComponent(lblemployeedetails))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblname)
.addComponent(txtname))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lbladdress)
.addComponent(txtaddress))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(txtaddress2))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcity)
.addComponent(txtcity))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblemail)
.addComponent(txtemail))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lbltelnumber)
.addComponent(txttelnumber))
.addGroup(glayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(lblcellnumber)
.addComponent(txtcellnumber))
);
getContentPane().add(temp2Panel);
glayout2 = new GroupLayout(temp2Panel);
temp1Panel.setLayout(glayout2);
glayout2.setAutoCreateGaps(true);
glayout2.setAutoCreateContainerGaps(true);
glayout2.setHorizontalGroup(
glayout2.createSequentialGroup()
.addGroup(glayout2.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(testing))
);
glayout2.setVerticalGroup(
glayout2.createSequentialGroup()
.addGroup(glayout2.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(testing))
);
this.setVisible(true);
}//test
/*************************************************************
* Main
*************************************************************/
public static void main(String[] args) {
new test();
}//main
}
什麼行會拋出異常? –
查看編輯3回答。異常堆棧跟蹤表明您正試圖將一個GroupLayout添加到多個容器。請在這個底部添加另一個編輯,其中一個顯示產生您在上面顯示的異常的代碼。 –