【问题标题】:How to add a panel with GroupLayout to a JFrame?如何将带有 GroupLayout 的面板添加到 JFrame?
【发布时间】:2012-11-12 13:46:51
【问题描述】:

如何将带有 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)

【问题讨论】:

  • 它并没有添加很多异常
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing layout awt panel


【解决方案1】:

您的GroupLayout 中缺少HorizontalGroup

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

见:How to Use GroupLayout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多