【问题标题】:Java Sizing JPanel & JPanel ComponentsJava Sizing JPanel & JPanel 组件
【发布时间】:2016-12-11 13:11:23
【问题描述】:

我正在尝试在 Java Swing 中构建 GUI。我在调整组件大小时遇到​​了很多麻烦。我设法通过使用setPreferredSize() 设置尺寸来调整JPanel 的大小,但是我无法使该JPanel 中的组件正确调整大小。

这是我的屏幕,只有 JPanel 可见。

当我将按钮添加到我的 JPanel 时,会发生以下情况:

如您所见,按钮占据了我的 JPanel/JFrame 的整个长度和宽度。为什么会这样?我该如何解决?

这是我的代码:

Application.java

public void start() {
    ControllerObserveer observeer = new ControllerObserveer();

    frame = new JFrame("-");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setLayout(new BorderLayout());
    frame.add(observeer.getView(), BorderLayout.CENTER);
    frame.setResizable(false);
}

ControllerObserver.java

public class ControllerObserveer {
    private ModelObserveer model;
    private ViewObserveer view; 

    public JPanel getView(){
        return this.view.p;
    }
}

ViewObserver.java

public class ViewObserveer {

    public JPanel p;

    public ViewObserveer(){
        this.p = new JPanel(new BorderLayout(), false);
        p.setPreferredSize(new Dimension(500, 500));
        p.setBackground(Color.red);

        JButton b = new JButton("Hello World!");
        b.setPreferredSize(new Dimension(40, 40));

        p.add(b);

    }
}

最后我想问一下不同布局之间的差异是什么,例如BorderLayout()BoxLayout()

感谢您的宝贵时间!

【问题讨论】:

  • 您正在使用BorderLayout。这是BorderLayout 的默认行为,如果没有组件添加到容器的其他部分(例如 WEST、EAST、NORTH、SOUTH),则添加到中心的组件将填充整个面板。您可能需要考虑先学习 Java 中的 LayoutManagers。
  • “最后我想问一下不同布局之间的差异是什么,”做教程的Laying Out Components Within a Container课程。这是创建 Swing GUI 所需要了解的内容,而且在像 SO 这样的问答网站中涵盖的内容太多了。投票分类为“过于宽泛”。
  • I managed to size a JPanel by setting the dimensions with setPreferredSize(), - 不要使用 setPreferredSize()。每个 Swing 组件都将确定自己的大小。 JPanel 将根据添加到面板的组件和正在使用的布局管理器确定大小。

标签: java swing


【解决方案1】:

在 Eclipse 上安装 Java WindowBuilder。所以,你可以把事情做好……“但我无法让那个 JPanel 中的组件正确调整大小。”

【讨论】:

  • 不要使用 IDE 来生成代码。如果您迁移到不同的 IDE,您不会学到任何有关 Swing 的知识,并且代码是不可维护和可移植的。了解如何有效地使用布局管理器。
  • 至少你得到了尺寸。
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
相关资源
最近更新 更多