【发布时间】: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 将根据添加到面板的组件和正在使用的布局管理器确定大小。