【问题标题】:How to reduce space between JCheckboxes in GridLayout如何减少GridLayout中JCheckboxes之间的空间
【发布时间】:2010-09-18 03:26:55
【问题描述】:

我在一列中有三个Java JCheckboxes,通过将容器JPanel 的布局设置为GridLayout(3, 1, 1, 1) 来排列。当我运行程序时,JCheckBoxes 之间的垂直空间太大;它看起来超过 1 个像素。由于我已经将布局中的 JCheckbox 之间的垂直间距设置为 1 像素,我还能如何减少这些 JCheckbox 之间的垂直间距?

谢谢。

【问题讨论】:

    标签: java swing layout checkbox


    【解决方案1】:

    我使用GridLayoutBorderLayoutGridBagLayout 进行了探索,我相信应用程序中出现的任何额外垂直空间都是由于JCheckBox 组件的大小造成的,与布局管理器无关。下面的所有示例在布局管理器中的组件之间都没有空格。

    网格布局

    //Changing to 3,1,1,0 makes slightly smaller (1 pixel) gap vertically 
    GridLayout layout = new GridLayout( 3, 1, 1, 0 );
    JPanel main = new JPanel( layout );
    main.add( new JCheckBox( "box 1" ) );
    main.add( new JCheckBox( "box 2" ) );
    main.add( new JCheckBox( "box 3" ) );
    

    GridBagLayout

    GridBagConstraints gbc = new GridBagConstraints();
    JPanel main = new JPanel( new GridBagLayout() );
    gbc.gridx=0;
    gbc.gridy=0;
    gbc.ipady=0;
    main.add( new JCheckBox( "box 1" ), gbc );
    gbc.gridy=1;
    main.add( new JCheckBox( "box 2" ), gbc );
    gbc.gridy=2;
    main.add( new JCheckBox( "box 3" ), gbc );
    

    边框布局

    JPanel main = new JPanel( new BorderLayout() );
    main.add( new JCheckBox( "box 1" ), BorderLayout.NORTH );
    main.add( new JCheckBox( "box 2" ), BorderLayout.CENTER );
    main.add( new JCheckBox( "box 3" ), BorderLayout.SOUTH );
    

    【讨论】:

      【解决方案2】:

      设置复选框的边框有帮助吗?

      JCheckBox checkBox = new JCheckBox();
      checkBox.setBorder(BorderFactory.createEmptyBorder());
      

      这也可能是由于外观的 UI 委托的渲染。您通常对此几乎没有控制权。

      【讨论】:

        【解决方案3】:

        谢谢史蒂夫和亚历克斯。你的两个回答都是正确的。通过将边框设置为空边框,我可以将复选框移得更近。

        【讨论】: