我正在为大学的小项目创建一个基本的屏幕保护程序,我打开它后无法关闭JFrame。我已经删除了外部面板,以使其看起来是一个合适的屏幕保护程序,但我现在必须打开任务管理器关闭程序,我希望窗口关闭,当我按下键盘上的按钮我该怎么办? 提前谢谢。
------- -------- EDIT
我已尝试过前两种方法,但我似乎无法使它们正常工作。这是我到目前为止的框架代码:
import java.awt.Color;
import javax.swing.JFrame;
public class ScreensaverTest
{
public static void main( String[] args )
{
JFrame frame = new JFrame( "Screen Saver" );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setUndecorated(true);
ScreenSaverJPanel screensaverTestJPanel = new ScreenSaverJPanel();
frame.add( screensaverTestJPanel );
frame.setBackground( Color.BLACK );
frame.setVisible( true );
frame.setLocation( 0, 0 );
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
}
-------- --------- EDIT
此外,我使用重绘方法在屏幕周围移动对象,我希望其中一些以不同的速度移动。我使用随机数生成器进行定位,因此调整数字实际上不是一个选项,请帮忙。
答案 0 :(得分:2)
有很多关于如何做到这一点的例子。
您需要将eventListener添加到侦听键盘输入的帧,然后关闭该帧。 试着看看:http://www.java2s.com/Code/Java/Swing-JFC/Reacttoframecloseaction.htm
您必须使用keyboard-related替换该事件,但这是我认为最好的方式..
编辑:
要回复帖子中的编辑,您可以执行以下操作:
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class Test {
public Test() {
final JFrame frame = new JFrame("Screen Saver");
frame.validate();
frame.setVisible(true);
KeyAdapter listener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
frame.dispose();
}
};
frame.addKeyListener(listener);
}
public static void main(String[] args) {
new Test();
}
}
瞧 - 这应该有用。它在Java 7上为我编译。
答案 1 :(得分:1)
如果您只有一个JFrame,那么这是代码。您应该在初始化组件时添加它。
addKeyListener(new KeyAdapter()
{
@Override
public void keyPressed(java.awt.event.KeyEvent evt)
{
processWindowEvent(new WindowEvent(getWindows()[0], WindowEvent.WINDOW_CLOSING));
}
});