【问题标题】:Java Swing JPanel BorderLayout doesn't work as I expectedJava Swing JPanel BorderLayout 不能按我的预期工作
【发布时间】:2015-05-27 18:31:52
【问题描述】:

首先,我必须说我在 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);
    }
}

【问题讨论】:

    标签: java swing border-layout boxlayout


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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 的建议为何有效。

      【讨论】:

        【解决方案3】:

        这里有一个更简单的方法来实现你所需要的:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-05
          • 2012-07-24
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          相关资源
          最近更新 更多