2013-04-20 73 views
0

我有容器jpanel,其中我使用了boxlayout管理器,我所做的是添加另一个面板,其中添加的面板包含使用flowlayout管理器的标签和文本字段。每次我在里面添加一个面板,在另一个面板之后创建一个烦人的大空间。我想减少我尝试使用setsize和setpreferredsize方法来调整它的面板的间距。这里是我的代码:添加jpanel后的java boxlayout空间

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

回答

0

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()); 
+0

非常感谢..我认为verticalglue加入每个元素加入到所述面板。 – 2013-04-20 04:00:51

+0

本教程可能会更好地解释“BoxLayout”胶水的工作原理:http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html#filler – Muel 2013-04-20 05:22:33