Java Swing JPanel BorderLayout没有像我预期的那样工作

时间:2015-05-27 18:31:53

标签: java swing border-layout boxlayout

首先,我必须说我3天前才开始用Java编程。

所以请耐心等待,并尝试给我一个详细的解释。

所以我尝试使用Swing创建这个演示GUI。我只是想在编写完整的设计之前首先测试不同组件的布局。所以我写了这个小代码,为JPanel添加了3个按钮。

import javax.swing.*;
import java.awt.*;

public class demoGUI_v1{
    JButton button1,button2,button3;
    JFrame frame;
    JPanel panel,panel2;    
    public static void main(String[] args){
        demoGUI_v1 gui = new demoGUI_v1();
        gui.framework();
    }

    public void framework(){
        frame = new JFrame();
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel = new JPanel();
        panel2 = new JPanel();
        button1 = new JButton("Button1");
        button2 = new JButton("Button2");
        button3 = new JButton("Button3");
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
        panel2.add(BorderLayout.CENTER,panel);
        frame.getContentPane().add(panel, BorderLayout.WEST);
        frame.setVisible(true);
    }
}

enter image description here

3 个答案:

答案 0 :(得分:1)

添加一些垂直胶水,使组件垂直居中:

    panel.add(Box.createVerticalGlue());
    panel.add(button1);
    panel.add(button2);
    panel.add(button3);
    panel.add(Box.createVerticalGlue());

答案 1 :(得分:0)

与您的问题没有直接关系,但是:

frame.getContentPane().add(BorderLayout.WEST,panel);

请勿使用add(...)方法的格式。正如API所说:

此方法自1.1起已过时。请改用方法add(Component,Object)。

此外,由于JDK4,您不需要获取内容窗格。所以你可以使用:

frame.add(panel, BorderLayout.LINE_START); // preferred over "WEST"

类名应以大写字母开头,不应在类名中使用“_”。再次,只需查看API即可查看所使用的类名。不要自己制定约定。

我建议您从原始代码获得的教程非常陈旧。我建议您首先使用Swing tutorial作为示例和解释。本教程涵盖了所有布局管理器,应该有助于解释为什么Eric的建议有效。

答案 2 :(得分:0)

在这里,您可以通过更简单的方式实现所需:

public void framework(){
    frame = new JFrame();
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    panel = new JPanel();
    panel2 = new JPanel();
    button1 = new JButton("Button1");
    button2 = new JButton("Button2");
    button3 = new JButton("Button3");
    panel.add(Box.createVerticalGlue());
    panel.add(button1);
    panel.add(button2);
    panel.add(button3);
    panel.add(Box.createVerticalGlue());
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
    frame.getContentPane().add(panel, BorderLayout.LINE_START);
    frame.setVisible(true);
}