gpt4 book ai didi

Java如何使JFrames最大化但不可调整大小

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:22 24 4
gpt4 key购买 nike

最初(参见我之前的问题“Java how to make JFrames start off as a maximised window”)我想制作一个开始时最大化的窗口。此代码完成此操作:

public static void main(String[] args)  {

JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);

}

然而,如果这个窗口被恢复下来,它就变成了一个几乎不存在的栏。为了解决这个问题,我使用 setSize() 为窗口设置了一个大小。这可行,但会带来另一个问题,窗口仍然可以调整大小。

为了解决这个问题,我设置了 setResizable(false);到目前为止,这是我的代码:

public static void main(String[] args) {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

JFrame frame = new JFrame("Jedia");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setSize(screenSize);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

但是,现在窗口以其指定大小(而不是最大化)开始,并且无法恢复。

所以,我的问题是,我怎样才能使窗口在开始时最大化,在它恢复时给它一个大小,并使它无法调整大小?还是制作一个开始时最大化且无法向下还原的窗口?

最佳答案

有一个几乎始终有效的简单修复方法:让您的框架在设置为可见后不可调整大小。所以只能这样修改你的代码:

public static void main(String[] args) {

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

JFrame frame = new JFrame("Jedia");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setSize(screenSize);
frame.setVisible(true); // FIRST visible = true
frame.setResizable(false); // THEN resizable = false
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

这样,框架将开始最大化,最大化按钮将变灰,防止用户使用它。 (我真的不知道你为什么要这样做。我想只有当窗口可见时才真正应用最大化状态,如果你之前让它不可调整大小,它不会应用。)

几乎一直有效,因为至少在 Windows 7 上,您可以通过单击标题栏并拖动它来使窗口脱离最大化状态。但它将是您之前设置的大小。问题是您的用户将无法再次最大化它,而且我还没有找到让听众使窗口回到最大化状态的方法。 (编辑:@David Kroukamp 在他的回答的最后部分表明可以通过使用 ComponentListener 强制最大化状态。因此您不必使用 setResizable(false) 这样您仍然Windows 7 有问题,因为无论出于何种原因,此事件都未捕获拖动操作,但用户将能够使用最大化按钮将其放回应有的位置。)

现在,几乎没有理由去做这种事情。当您阻止用户操纵他们的窗口时,用户并不真正喜欢(例如,无法移动最大化的窗口,当您有多个屏幕时,这会很烦人)。一个异常(exception)是,如果您正在制作一个通常是全屏的游戏。但是你不会想要一个 JFrame,因为你不想要所有的装饰,而是一个窗口。

如果您的问题是默认窗口尺寸非常小,那是正常的。你必须首先在你的框架中放置一些东西(一些控件,按钮,你在你的应用程序中想要的东西),使用布局(这很重要)然后调用方法 pack()在你的框架上。它将为您的窗口选择一个不错的默认大小。

最后,最后一句话。我已将我的示例代码放在 main 中方法作为快捷方式,但您应该始终使用 SwingUtils.invokeLater() 在 Swing EDT 中执行 Swing 操作.

关于Java如何使JFrames最大化但不可调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com