如何减少GridLayout中JCheckbox之间的空间

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

谢谢。

我探索了使用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 ); 

BorderLayout的

 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 ); 

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

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

这也可能是由于Look&Feel的UI委托的渲染。 你通常无法控制它。

谢谢Steve和Alex。 你的回答都是正确的。 通过将边框设置为空边框,我可以将复选框移近。