如何将具有GroupLayout的面板添加到JFrame?还有许多其他小组。
我制作了一些FlowLayout
(btnPanel
数组)的面板。我使用GroupLayout
(btnPanel2
)将其添加到另一个面板。垂直,一切都很好。
但是如何将btnPanel2
添加到框架中?
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);
导致问题的一行是
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)
答案 0 :(得分:4)
您遗失了HorizontalGroup
中的GroupLayout
。
使用GroupLayout
时,您必须指定水平和垂直布局。每个组件必须在每个组中指定一次。不这样做会导致IllegalStateException
。