如何在Java Swing Layouts中调整组件?

时间:2014-04-28 22:46:45

标签: java swing layout-manager border-layout flowlayoutpanel

我一直在尝试在Eclipse Window Builder中创建一个Java Swing GUI。经过大量的努力,我已经能够实现这一目标。我做的是制作JFrame,为其添加BorderLayout。我在此布局的northsouth位置添加了两个面板。我在底部面板中添加了几个按钮。

我的问题来自顶部面板。此面板有一个Flow Layout,并且有two more panels。左侧面板上有按钮,位于正确的位置。右侧面板本身并不在正确的位置。

  1. 我希望右侧面板与父窗口的右侧对齐(左侧面板应保持在左侧) - 因此最终会有一些空间左右面板。 这是右侧和左侧面板应该左右对齐)并且它们之间应该有空格,因为我想要左侧有4个按钮,而我的屏幕右侧有2个按钮。

  2. 在右侧面板中,两个按钮中的最右边的两个按钮应该右对齐,两个按钮之间应该有一些空格。< / p>

  3. 我提供源代码。如果有人可以帮助/指导我实现我想要的目标,我将不胜感激。

    enter image description here


    消息代码: -

    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import java.awt.FlowLayout;
    import javax.swing.SwingConstants;
    import javax.swing.BoxLayout;
    import javax.swing.JLabel;
    
    public class ParentFrame extends JFrame {
        public ParentFrame() {
            getContentPane().setLayout(new BorderLayout(50, 50));
    
            JPanel parentPanel_bottom = new JPanel();
            getContentPane().add(parentPanel_bottom, BorderLayout.SOUTH);
            JButton btnInstr = new JButton("1");
            parentPanel_bottom.add(btnInstr);
            JButton btnCourse = new JButton("2");
            parentPanel_bottom.add(btnCourse);
            JButton btnModule = new JButton("3");
            parentPanel_bottom.add(btnModule);
            JButton btnDays = new JButton("4");
            parentPanel_bottom.add(btnDays);
            JButton btnXtra = new JButton("5");
            parentPanel_bottom.add(btnXtra);
    
            JPanel parentPanel_top = new JPanel();
            getContentPane().add(parentPanel_top, BorderLayout.NORTH);
            parentPanel_top.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    
    
            JPanel topleftpanel = new JPanel();
            parentPanel_top.add(topleftpanel, BorderLayout.WEST);
            JButton button = new JButton("1");
            topleftpanel.add(button);
            JButton button_1 = new JButton("2");
            topleftpanel.add(button_1);
            JButton button_2 = new JButton("3");
            topleftpanel.add(button_2);
            JButton button_3 = new JButton("4");
            topleftpanel.add(button_3);
    
            JPanel toprightpanel = new JPanel();
            parentPanel_top.add(toprightpanel, BorderLayout.EAST);
            parentPanel_top.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
            JButton button_4 = new JButton("1");
            toprightpanel.add(button_4);
            JButton button_5 = new JButton("2");
            toprightpanel.add(button_5);
        }
    
    }
    

2 个答案:

答案 0 :(得分:3)

试试这个

JPanel parentPanel_top = new JPanel(new GridLayout(1, 2));
...
JPanel topleftpanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
parentPanel_top.add(topleftpanel);    
...
JPanel toprightpanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 5));
parentPanel_top.add(toprightpanel);

注意:删除为setLayout()以上设置的额外JPanel

enter image description here

答案 1 :(得分:0)

您设置到parentPanel_top面板的布局是flowLayout,您不能只调用BorderLayout.WEST将其指定到西方.BorderLayout只能使用它而不是FlowLayout ..

<强>解决方案:

将布局更改为BorderLayout ..

parentPanel_top.setLayout(new BorderLayout());