BorderLayout的用法

时间:2014-12-17 14:08:13

标签: java user-interface

我遇到了BorderLayout的问题,设置为绿色JPanel方面。它不按行顺序显示EAST上的元素。我必须将它与GridBagLayout结合使用吗?有人可以建议我该如何解决这个问题?

基本上问题是在我使用时在下面的绿色区域内显示物体 目前的布局: enter image description here

我的目标是实现这种布局: enter image description here

public class GUILayout {

    public static void main(String[] args) {
        JFrame jf = new JFrame();
        JButton jbO = new JButton("CSIS0396");
        JButton jbl = new JButton("Final");
        JButton jb2 = new JButton("2010");
        JButton jb3 = new JButton("Exam");

        JPanel panel = new JPanel();
        JPanel panel2 = new JPanel();

        JButton object_btn = new JButton("Object");
        JButton oriented_btn = new JButton("Oriented");
        JButton programming_btn = new JButton("Programming");
        JButton and_btn = new JButton("and");
        JButton java_btn = new JButton("Java");

        BorderLayout layout = new BorderLayout();

        panel.setLayout(layout);
        panel2.setLayout(layout);


        panel.add(BorderLayout.CENTER,object_btn);
        panel.add(BorderLayout.WEST,oriented_btn);
        panel.add(BorderLayout.WEST,programming_btn);
        panel.add(BorderLayout.WEST,and_btn);
        panel.add(BorderLayout.WEST,java_btn);

        panel2.add(BorderLayout.NORTH, jbO);
        panel2.add(BorderLayout.SOUTH, jb2);
        panel2.add(BorderLayout.WEST, jbl);
        panel2.add(BorderLayout.EAST, jb3);

        panel.setBackground(Color.GREEN);
        panel2.setBackground(Color.RED);


        jf.getContentPane().add(panel);
        jf.getContentPane().add(panel2, BorderLayout.EAST);

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(400, 300);
        jf.setVisible(true);

    }

}

2 个答案:

答案 0 :(得分:1)

不要为多个组件共享相同的布局,并使用左侧面板到定位按钮的框布局


enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class GUILayout {

    public static void main(String[] args) {

        JFrame jf = new JFrame();
        JButton jbO = new JButton("CSIS0396");
        JButton jbl = new JButton("Final");
        JButton jb2 = new JButton("2010");
        JButton jb3 = new JButton("Exam");

        JPanel panel = new JPanel();
        JPanel panel2 = new JPanel();

        JButton object_btn = new JButton("Object");
        JButton oriented_btn = new JButton("Oriented");
        JButton programming_btn = new JButton("Programming");
        JButton and_btn = new JButton("and");
        JButton java_btn = new JButton("Java");

        BorderLayout layout = new BorderLayout();

        panel2.setLayout(layout);
        panel.setLayout( new BoxLayout(panel, BoxLayout.PAGE_AXIS));


        panel.add(object_btn);
        panel.add(oriented_btn);
        panel.add(programming_btn);
        panel.add(and_btn);
        panel.add(java_btn);

        panel2.add(BorderLayout.NORTH, jbO);
        panel2.add(BorderLayout.SOUTH, jb2);
        panel2.add(BorderLayout.WEST, jbl);
        panel2.add(BorderLayout.EAST, jb3);

        panel.setBackground(Color.GREEN);
        panel2.setBackground(Color.RED);

        jf.setLayout(new BorderLayout());
        jf.getContentPane().add(panel ,BorderLayout.WEST);
        jf.getContentPane().add(panel2, BorderLayout.EAST);

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(400, 300);
        jf.setVisible(true);

    }

}

答案 1 :(得分:1)

第一个问题是您的面板共享布局。您必须为每个人使用新的BorderLayout。

第二个问题是BorderLayout在每个约束位置只能有一个组件。当您尝试将多个组件添加到WEST位置时,每个组件都会替换之前位于该位置的组件:

panel.add(BorderLayout.WEST,oriented_btn);

// Implicitly removes oriented_btn from panel
panel.add(BorderLayout.WEST,programming_btn);

// Implicitly removes programming_btn from panel
panel.add(BorderLayout.WEST,and_btn);

// Implicitly removes and_btn from panel
panel.add(BorderLayout.WEST,java_btn);

解决方案是将它们放在自己的容器中,例如Box或带有GridLayout的JPanel:

Box box = Box.createVerticalBox();
// Or:
//JComponent box = new JPanel(new GridLayout(0, 1));
box.add(oriented_btn);
box.add(programming_btn);
box.add(and_btn);
box.add(java_btn);

panel.add(BorderLayout.WEST, box);