Java 8与Java 12之间的区别,JFrame#setExtendedState不适用于JFrame#setPreferredSize

问题描述 投票:-1回答:2

我想创建一个最初是最大化的JFrame,并且具有定义的大小,当用户按下最大化按钮时,它会缩小到。

最小示例:

package minimalfullscreenexample;

import java.awt.Dimension;
import static java.awt.Frame.MAXIMIZED_BOTH;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class MinimalFullscreenExample {

    public void displayFrame() {
        JFrame frame = new JFrame("Minimal example");
        frame.setExtendedState(MAXIMIZED_BOTH);
        frame.setPreferredSize(new Dimension(500, 300));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(()  -> { new MinimalFullscreenExample().displayFrame(); });
    }
}

预期的行为:窗口将最大化打开。当用户单击最大化按钮时,该窗口将变为非最大化状态,并且大小为500x300像素。

这应该和它一起工作

  • Linux,oracle jdk 1.8.0_201
  • Linux,openjdk 1.8.0_252
  • Linux,openjdk 11.0.7
  • Linux,openjdk 12.0.1
  • Windows,oracle jdk 1.8.0.171(旧版本,我知道,但是..该示例有效)
  • 不适用于

  • Windows,openjdk 12.0.1
  • 窗口未最大化打开的位置。

当删除setPreferredSize调用后,窗口将最大化打开,但在未最大化时缩小为“无”。

是否有已知的错误或解决方法? (将setPreferredSize移到setExtendedState上方无济于事。

我想创建一个最初是最大化的JFrame,并且具有定义的大小,当用户按下最大化按钮时,它会缩小到。最小示例:包minimalfullscreenexample;导入java ....

java swing jframe fullscreen
2个回答
0
投票

我也遇到过同样的问题,但是我设法解决了。问题是frame.pack()。实际上,它会将框架的大小设置为其首选大小。我还注意到Java 8(或9)与Java 12之间的区别,我认为这是openjdk上的错误。


0
投票

我认为您只是误解了pack的效果:

© www.soinside.com 2019 - 2024. All rights reserved.