代码之家  ›  专栏  ›  技术社区  ›  Richard

如何在gridlayout中减少jcheckbox之间的空间

  •  4
  • Richard  · 技术社区  · 16 年前

    我有三个爪哇 JCheckboxes 在一列中,通过设置容器的布局来排列 JPanel GridLayout(3, 1, 1, 1) . 当我运行程序时,jcheckbox之间的垂直空间太大;看起来超过1个像素。因为我已经将布局中jcheckbox之间的垂直空间设置为1像素,否则如何减少这些jcheckbox之间的垂直空间?

    谢谢。

    3 回复  |  直到 8 年前
        1
  •  3
  •   Alex B    16 年前

    我探索使用 GridLayout , BorderLayout GridBagLayout 我相信应用程序中出现的任何额外垂直空间都是由于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" ) );
    

    网格包布局

    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
  •  3
  •   Steve McLeod    16 年前

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

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

    这也可能是由于look&feel的ui委托的呈现。你通常无法控制这一切。

        3
  •  0
  •   Richard    16 年前

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