【问题标题】:Why is Java GUI JFrame size different sizes on different operating systems?为什么 Java GUI JFrame 在不同的操作系统上大小不同?
【发布时间】:2016-01-16 12:45:05
【问题描述】:

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

您可以在下面看到 GUI 的外观:

在这里您可以看到它在 Linux 上的实际样子:

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

图形用户界面的代码是这样的:

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 并不在所有操作系统上都相同。

是不是我做错了什么导致了这种情况,或者有办法解决它吗?

【问题讨论】:

  • 尝试添加frmExample.pack() @see the docs on using pack()
  • @EddieB 使用pack() 使整个窗口尽可能小(字面意思是1px 宽度)。我认为这是因为@camickr 回答的原因。
  • Camickr 在 pack() 之前包含 getPreferredSize(),这就是区别。
  • @crossboy007,我的理由解决了问题吗?

标签: java swing jpanel size


【解决方案1】:

是不是我做错了什么

frmExample.getContentPane().setLayout(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 上的演示开始。

【讨论】:

  • 如果我在初始化组件下添加设置大小怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2014-02-06
  • 2018-10-16
  • 2017-11-29
  • 2015-09-14
相关资源
最近更新 更多