Jac*_*nor 5 java swing screen jframe dimension
最初(参见我之前的问题" Java如何使JFrames作为最大化窗口开始 ")我想创建一个最大化的窗口.此代码完成此操作:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果此窗口恢复,它将成为一个几乎不存在的栏.为了解决这个问题,我使用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);
}
Run Code Online (Sandbox Code Playgroud)
但是,现在窗口以指定的大小(而不是最大化)开始,无法恢复.
所以,我的问题是,我怎样才能使窗口开始最大化,给它一个大小,以便它恢复时,并使其不可能重新调整大小?或者创建一个开始最大化并且无法恢复的窗口?
有一个几乎始终有效的简单修复:使框架在设置可见后无法调整大小。所以只能这样修改你的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
这样,框架将开始最大化,最大化按钮将变灰,阻止用户使用它。(我真的不知道为什么你必须这样做。我想只有当窗口变得可见时,最大化状态才真正应用,如果你之前使它不可调整大小,它就不会应用。)
它几乎一直有效,因为在 Windows 7 上至少您可以通过单击标题栏并拖动它来使窗口退出最大化状态。但它会是你之前设置的大小。问题是您的用户将无法再次最大化它,并且我还没有找到侦听器使窗口恢复到最大化状态的方法。(编辑:@David Kroukamp 在他的答案的最后部分显示,可以通过使用 ComponentListener 强制最大化状态。因此您不必使用setResizable(false)这种方式,您在 Windows 7 中仍然存在问题,因为拖动操作无论出于何种原因,该事件都不会捕获,但用户将能够使用最大化按钮将其放回应有的位置。)
现在,几乎没有理由做这种事情。当您阻止用户操作其窗口时,用户并不真正喜欢(例如,最大化的窗口无法移动,当您有多个屏幕时,这可能会很烦人)。一个例外是,如果您正在制作游戏,通常是全屏的。但是这样您就不需要 JFrame,因为您不需要所有装饰,而是需要 Window。
如果您的问题是默认窗口尺寸非常小,这是正常的。您必须首先在框架中放置一些内容(一些控件、按钮、应用程序中您想要的内容),使用布局(这很重要),然后调用pack()框架上的方法。它将为您的窗口选择一个不错的默认大小。
最后,最后一句话。我已将示例代码main作为快捷方式放入方法中,但您应该始终使用SwingUtils.invokeLater().
| 归档时间: |
|
| 查看次数: |
21769 次 |
| 最近记录: |