Reputation: 77
How to add a panel with GroupLayout to a JFrame? There are many other panels, too.
I made some panels with FlowLayout
(btnPanel
array). I added them to another panel with GroupLayout
(btnPanel2
). Vertically, all fine.
But how to add btnPanel2
to a frame?
public static String[][] NORMAL_BUTTONS = {
{"MC", "MR", "MS", "M+" ,"M-"},
{"<-", "CE", "C" , "+/-","√" },
{"7" , "8" , "9" , "/" ,"%" },
{"4" , "5" , "6" , "*" ,"1/x"},
{"1", "2", "3", "-","="},
{"0", ".", " ","+"}
};
Panel BtnPanel[]=new Panel[6];//(new FlowLayout());
BtnPanel[0]=new Panel();
BtnPanel[0].setLayout(new FlowLayout());
for(int i=0;i< NORMAL_BUTTONS.length;i++){
BtnPanel[i]=new Panel();
BtnPanel[i].setLayout(new FlowLayout());
for(int j=0;j<NORMAL_BUTTONS[i].length;j++)
{
Button btn = new Button(NORMAL_BUTTONS[i][j]);
// btn.setFont(BTN_FONT);
BtnPanel[i].add(btn);
}
}
JPanel BtnPanel2=new JPanel();
GroupLayout myl=new GroupLayout(BtnPanel2);
myl.setAutoCreateGaps(true);
myl.setAutoCreateContainerGaps(true);
myl.setVerticalGroup(myl.createSequentialGroup()
.addGroup(myl.createParallelGroup(GroupLayout.Alignment.BASELINE))
// THE FOLLOWING PANELS SHOULD HE VERTICALLY ALIGNED
// THE FOLLOWING PANELS SHOULD HE VERTICALLY ALIGNED
.addComponent(BtnPanel[0])
.addComponent(BtnPanel[1])
.addComponent(BtnPanel[2])
.addComponent(BtnPanel[3])
.addComponent(BtnPanel[4])
.addComponent(BtnPanel[5])
);
BtnPanel2.setLayout(myl);
The line that causes the problem is following
frame.add(BtnPanel2,BorderLayout.EAST);
Exception in thread "main" java.lang.IllegalStateException: java.awt.Panel[panel0,0,0,0x0,invalid,layout=java.awt.FlowLayout] is not attached to a horizontal group at javax.swing.GroupLayout.checkComponents(Unknown Source) at javax.swing.GroupLayout.prepare(Unknown Source) at javax.swing.GroupLayout.preferredLayoutSize(Unknown Source) at java.awt.Container.preferredSize(Unknown Source) at java.awt.Container.getPreferredSize(Unknown Source) at javax.swing.JComponent.getPreferredSize(Unknown Source) at java.awt.BorderLayout.preferredLayoutSize(Unknown Source) at java.awt.Container.preferredSize(Unknown Source) at java.awt.Container.getPreferredSize(Unknown Source) at javax.swing.JComponent.getPreferredSize(Unknown Source) at javax.swing.JRootPane$RootLayout.preferredLayoutSize(Unknown Source) at java.awt.Container.preferredSize(Unknown Source) at java.awt.Container.getPreferredSize(Unknown Source) at javax.swing.JComponent.getPreferredSize(Unknown Source) at java.awt.BorderLayout.preferredLayoutSize(Unknown Source) at java.awt.Container.preferredSize(Unknown Source) at java.awt.Container.getPreferredSize(Unknown Source) at java.awt.Window.pack(Unknown Source) at myPackage.Calc.createAndShowGui(Test.java:188) at myPackage.Test.main(Test.java:199)
Upvotes: 1
Views: 2512
Reputation: 159754
You are missing a HorizontalGroup
in your GroupLayout
.
When using a GroupLayout
, you have to specify a Horizontal and a Vertical layout. Each component must be specified exactly once in each group. Not doing this causes an IllegalStateException
.
Upvotes: 4