GridLayout的组件是否固定宽度和高度?

时间:2013-05-04 00:02:31

标签: java swing layout user-interface

我有主面板,我正在动态添加组件。

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

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

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

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是使用JPanel。 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 );
           }
        } );
     }
  }