我正在尝试在Java上设计GUI,但我遇到的问题是JFrame的大小在不同的操作系统上显得不同。
下面你可以看到GUI应该是什么样子:
在这里你可以看到它在Linux上的实际情况:
在这里你可以看到它在Mac上的样子:
GUI的代码是:
private void initialize() {
frmExample = new JFrame();
frmExample.getContentPane().setBackground(Color.BLUE);
frmExample.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.setBounds(0, 0, 400, 300);
frmExample.getContentPane().add(panel);
frmExample.setTitle("Example");
frmExample.setBounds(100, 100, 400, 272);
frmExample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
我尝试将frmExample.setBounds(100, 100, 400, 272)
更改为frmExample.setBounds(100, 100, 400, 300)
,这有助于修复此示例项目中的颜色,但是如果我想在屏幕底部显示无法作为底部的文本GUI上的屏幕在所有操作系统上的接缝都不一样。
有什么我做错了导致这种情况还是有办法解决它?
答案 0 :(得分:4)
有什么我做错了吗
frmExample.getContentPane().setLayout(null);
不要使用null布局。 Swing旨在与布局管理器一起使用,以便可以在不同的操作系统上正确显示组件。
但如果我想在屏幕底部显示文字
那么你的代码应该是这样的:
JPanel panel = new JPanel()
{
@Override
public Dimension getPreferredSize()
{
return new Dimenstion(400, 400);
}
};
frame.add(panel, BorderLayout.CENTER);
JLabel label = new JLabel("text at the bottom of the screen");
frame.add(label, BorderLayout.PAGE_END);
frame.pack();
frame.setVisible(true);
现在,pack()方法将考虑添加到框架中的所有组件的首选大小,并且在所有平台上看起来都是正确的。
阅读Using Layout Managers部分。下载演示代码并使用它来理解如何使用布局管理器的概念。从BorderLayout上的演示开始。