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);
スレッド"main"の例外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に aがありませんGroupLayout

を使用する場合GroupLayout、水平レイアウトと垂直レイアウトを指定する必要があります。各コンポーネントは、各グループで 1 回だけ指定する必要があります。これを行わないと、IllegalStateException.

参照: GroupLayout の使用方法

于 2012-11-24T14:15:00.233 に答える