添加jpanel后的java boxlayout空间
我有一个容器jpanel,在其中我使用了一个boxlayout管理器,我要做的是在其中添加另一个面板,其中添加的面板包含使用flowlayout管理器的标签和文本字段。每次我在里面添加一个面板,它就会在另一个面板之后创建一个恼人的大空间。我想减少面板的间距,我曾尝试使用setsize和setpreferredsize方法进行调整。这是我的密码:添加jpanel后的java boxlayout空间,java,swing,layout,jpanel,boxlayout,Java,Swing,Layout,Jpanel,Boxlayout,我有一个容器jpanel,在其中我使用了一个boxlayout管理器,我要做的是在其中添加另一个面板,其中添加的面板包含使用flowlayout管理器的标签和文本字段。每次我在里面添加一个面板,它就会在另一个面板之后创建一个恼人的大空间。我想减少面板的间距,我曾尝试使用setsize和setpreferredsize方法进行调整。这是我的密码: JPanel global = new JPanel(); global.setLayout(new BoxLayout(global, Box
JPanel global = new JPanel();
global.setLayout(new BoxLayout(global, BoxLayout.Y_AXIS));
global.setPreferredSize(new Dimension(500,312));
global.setSize(500,312);
global.setBounds(8, 5, 500, 312);
global.setBorder(BorderFactory.createLineBorder(Color.black));
global.setBackground(Color.white);
//Elements of global
JLabel label1 = new JLabel("Global Settings");
label1.setAlignmentX(Component.CENTER_ALIGNMENT);
label1.setFont(new Font("tahoma", Font.BOLD, 17));
global.add(label1);
global.add(new JSeparator());
//Name Field
JPanel c = new JPanel();
c.setSize(100, 1);
c.setPreferredSize(new Dimension(100,1));
c.setLayout(new FlowLayout());
JLabel label = new JLabel("Display Name");
JTextField text = new JTextField(20);
text.setPreferredSize(new Dimension(20,25));
c.add(label);
c.add(text);
global.add(c);
//Hostname Field
JPanel c1 = new JPanel();
c1.setSize(100, 1);
c1.setPreferredSize(new Dimension(100,1));
c1.setLayout(new FlowLayout());
JLabel label2 = new JLabel("Host Name");
JTextField text1 = new JTextField(20);
text1.setPreferredSize(new Dimension(20,25));
c1.add(label2);
c1.add(text1);
global.add(c1);
BoxLayout
是一个非常激进的LayoutManager
,并不总是遵循其中组件的首选尺寸。相反,我们必须设置BoxLayout
组件的最大大小,以防止它们被拉伸。此外,我们需要通过Box.createVerticalGlue()
添加一个Box
——这是一个特殊的拉伸组件(而不是其他组件)
以下是重写的代码:
JPanel global = new JPanel();
global.setLayout(new BoxLayout(global, BoxLayout.Y_AXIS));
global.setPreferredSize(new Dimension(500, 312));
global.setSize(500, 312);
global.setBounds(8, 5, 500, 312);
global.setBorder(BorderFactory.createLineBorder(Color.black));
global.setBackground(Color.white);
// Elements of global
JLabel label1 = new JLabel("Global Settings");
label1.setAlignmentX(Component.CENTER_ALIGNMENT);
label1.setFont(new Font("tahoma", Font.BOLD, 17));
global.add(label1);
JSeparator sep = new JSeparator();
sep.setMaximumSize(new Dimension((int) sep.getMaximumSize().getWidth(), 50));
global.add(sep);
// Name Field
JPanel c = new JPanel();
c.setMaximumSize(new Dimension((int) c.getMaximumSize().getWidth(), 50));
JLabel label = new JLabel("Display Name");
JTextField text = new JTextField(20);
text.setPreferredSize(new Dimension(20, 25));
c.add(label);
c.add(text);
global.add(c);
// Hostname Field
JPanel c1 = new JPanel();
c1.setMaximumSize(new Dimension((int) c1.getMaximumSize().getWidth(), 50));
JLabel label2 = new JLabel("Host Name");
JTextField text1 = new JTextField(20);
text1.setPreferredSize(new Dimension(20, 25));
c1.add(label2);
c1.add(text1);
global.add(c1);
global.add(Box.createVerticalGlue());
谢谢。。我认为verticalglue是在面板中添加的每个元素中添加的。本教程可以更好地解释
BoxLayout
glue的工作原理: