如何从Java中最小化JFrame窗口?

35

在我的Java应用程序中,我有一个JFrame窗口,如何通过我的Java程序将其最小化?

6个回答

56

最小化使用frame.setState(Frame.ICONIFIED)

恢复使用frame.setState(Frame.NORMAL)


@rogerdpack 不,它可以显示(可视化)隐藏的窗口,但不能从最小化中还原。 - cubanacan

17

最小化:

frame.setState(Frame.ICONIFIED);

另一种最小化的方法:

frame.setExtendedState(JFrame.ICONIFIED);

普通大小:

frame.setState(Frame.NORMAL);

另一种恢复正常大小的方法:

frame.setExtendedState(JFrame.NORMAL);

最大化:

frame.setState(Frame.MAXIMIZED_BOTH);

最大化的另一种方法:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

全屏最大化:

GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
try { device.setFullScreenWindow((java.awt.Window) frame); } catch (Exception e) { device.setFullScreenWindow(null); }

请参考JFrame文档以获取更多信息。


12

你可以用两种方式来实现这个:

JFrame frame = new JFrame("Test");

frame.setExtendedState(JFrame.ICONIFIED); // One way
frame.setState(JFrame.ICONIFIED); // Another way

1
另一种方法。
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_ICONIFIED));

没起作用。ICONIFIED 起作用了。也许我触发事件太早了,但另一个起作用了。 - mjs

0
你可以使用以下代码:
this.setState(YourJFrame.ICONIFIED);

你可以使用以下代码来最大化它:

this.setExtendedState(MAXIMIZED_BOTH);

-1
如果您正在尝试为组件的事件编写代码,请尝试下面的代码。并确保包含此代码的类是由Frame类扩展的。
private void closeMouseClicked(java.awt.event.MouseEvent evt){                        
    this.setState(1);
}

或者创建一个Frame类的实例并调用setState(1);

4
"this.setState(1);" 这个语句中的“1”是一个魔法常量。为什么要浪费时间写"JFrame.ICONIFIED",直接写"1"不就好了吗? :) - kajacx
8
因为其他参与项目的开发人员不知道“1”代表什么意思,这让代码难以理解,降低了可读性。因此,“1”是晦涩的,需要进行改进。 - Dioxin
7
此外,如果他们决定更改常量的值,你的代码将因没有明显原因而崩溃。调试起来一定很有趣。 - weeknie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接