1

如何将带有 GroupLayout 的面板添加到 JFrame?还有许多其他面板。

我用FlowLayoutbtnPanel数组)做了一些面板。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);
线程“主”java.lang.IllegalStateException 中的异常:java.awt.Panel[panel0,0,0,0x0,invalid,layout=java.awt.FlowLayout] 未附加到水平组
    在 javax.swing.GroupLayout.checkComponents(未知来源)
    在 javax.swing.GroupLayout.prepare(未知来源)
    在 javax.swing.GroupLayout.preferredLayoutSize(未知来源)
    在 java.awt.Container.preferredSize(未知来源)
    在 java.awt.Container.getPreferredSize(未知来源)
    在 javax.swing.JComponent.getPreferredSize(未知来源)
    在 java.awt.BorderLayout.preferredLayoutSize(未知来源)
    在 java.awt.Container.preferredSize(未知来源)
    在 java.awt.Container.getPreferredSize(未知来源)
    在 javax.swing.JComponent.getPreferredSize(未知来源)
    在 javax.swing.JRootPane$RootLayout.preferredLayoutSize(未知来源)
    在 java.awt.Container.preferredSize(未知来源)
    在 java.awt.Container.getPreferredSize(未知来源)
    在 javax.swing.JComponent.getPreferredSize(未知来源)
    在 java.awt.BorderLayout.preferredLayoutSize(未知来源)
    在 java.awt.Container.preferredSize(未知来源)
    在 java.awt.Container.getPreferredSize(未知来源)
    在 java.awt.Window.pack(未知来源)
    在 myPackage.Calc.createAndShowGui(Test.java:188)
    在 myPackage.Test.main(Test.java:199)
4

1 回答 1

4

HorizontalGroup在你的GroupLayout.

使用时GroupLayout,您必须指定水平和垂直布局。每个组件必须在每个组中仅指定一次。不这样做会导致IllegalStateException.

请参阅:如何使用 GroupLayout

于 2012-11-24T14:15:00.233 回答