为什么Java GUI JFrame在不同的操作系统上大小不同?

时间:2015-10-18 00:03:46

标签: java swing jpanel size

我正在尝试在Java上设计GUI,但我遇到的问题是JFrame的大小在不同的操作系统上显得不同。

下面你可以看到GUI应该是什么样子:

Should look like this.

在这里你可以看到它在Linux上的实际情况:

Looks like on Linux.

在这里你可以看到它在Mac上的样子:

Looks like on 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上的屏幕在所有操作系统上的接缝都不一样。

有什么我做错了导致这种情况还是有办法解决它?

1 个答案:

答案 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上的演示开始。