Java 组件宽度和高度固定的GridLayout?

Java 组件宽度和高度固定的GridLayout?,java,swing,layout,user-interface,Java,Swing,Layout,User Interface,我有一个主面板,我正在向其中动态添加组件 主面板的GridLayout限制为3列0行(0行将允许行无限增长),但问题是我希望所有组件都具有固定大小或组件的首选大小 我可以使用其他布局,如果它符合我的要求。。。但现在只有GridLayout允许我将列限制为3 …我忘了提到,主面板被添加到JScrollpane中,所以我可以垂直滚动。一种方法是使用JPanels。GridLayout将拉伸组件,但如果将组件包装在JPanel中,则JPanel将被拉伸。而且,由于JPanel使用FlowLayout,

我有一个主面板,我正在向其中动态添加组件

主面板的GridLayout限制为3列0行(0行将允许行无限增长),但问题是我希望所有组件都具有固定大小或组件的首选大小

我可以使用其他布局,如果它符合我的要求。。。但现在只有GridLayout允许我将列限制为3


…我忘了提到,主面板被添加到JScrollpane中,所以我可以垂直滚动。

一种方法是使用JPanels。GridLayout将拉伸组件,但如果将组件包装在JPanel中,则JPanel将被拉伸。而且,由于JPanel使用FlowLayout,它不会拉伸组件,因此您的组件将保持其首选大小

下面是一个使用JButton的示例。请注意,我是如何在每个循环中将它们添加到(新的)JPanel中的,然后将面板添加到网格布局中的

  import javax.swing.*;

  public class GridLayout {
     public static void main( String[] args ) {
        SwingUtilities.invokeLater( new Runnable() {
           public void run() {

              JFrame frame = new JFrame();

              frame.setLayout( new java.awt.GridLayout( 0, 3 ) );
              for( int i = 0; i < 21; i++ ) {
                 JPanel panel = new JPanel();  // Make a new panel
                 JButton button = new JButton( "Button "+i );
                 panel.add( button );  // add the button to the panel...
                 frame.add( panel );   // ...then add the panel to the layout
              }
              frame.pack();
              frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
              frame.setLocationRelativeTo( null );
              frame.setVisible( true );
           }
        } );
     }
  }
import javax.swing.*;
公共类网格布局{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新JFrame();
setLayout(新java.awt.GridLayout(0,3));
对于(int i=0;i<21;i++){
JPanel panel=new JPanel();//创建一个新面板
JButton按钮=新JButton(“按钮”+i);
panel.add(button);//将按钮添加到面板。。。
frame.add(panel);/…然后将面板添加到布局中
}
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
} );
}
}

如果符合我的要求,我可以使用其他布局…
-是的,这就是你需要做的。GridLayout始终调整组件的大小。尝试GridBagLayout。很难从您的描述中分辨出来,但我建议您使用类似于
GridBagLayout
或甚至
FlowLayout
的东西,这两者都可以(如果配置正确)如果组件有足够的空间,请尊重它们的首选大小…@camickr如何将GridBagLayout限制为3列?@MadProgrammer如何将FlowLayout限制为3列?@JovanMeshkov您必须自己做这件事<如果以任何方式添加超过3个组件,则代码>网格布局将溢出到另一行。。。