gpt4 book ai didi

java - 使用不循环的keylistener退出程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:38 26 4
gpt4 key购买 nike

我目前正在学习 Java,并且正在尝试创建一个屏幕保护程序。最重要的规则是不要使用任何循环。另一个关键标准是使用“x”退出程序,使用“z”从全屏变为半屏。我的第一个倾向是使用 setDefaultCloseOperation 和一个 keylistener 来退出程序,但我还没有找到任何方法来做到这一点。任何人都可以帮助我了解如何在不使用循环的情况下执行此操作。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ScreenSaver1 extends JPanel {
private JFrame frame = new JFrame("FullSize");
private Rectangle rectangle;
boolean full;

ScreenSaver1() {
// Remove the title bar, min, max, close stuff
frame.setUndecorated(true);
// Add a Key Listener to the frame
frame.addKeyListener(new KeyHandler());
// Add this panel object to the frame
frame.add(this);
// Get the dimensions of the screen
rectangle = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
// Set the size of the frame to the size of the screen
frame.setSize(rectangle.width, rectangle.height);
frame.setVisible(true);
// Remember that we are currently at full size
full = true;
}
// This method will run when any key is pressed in the window
class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
// Terminate the program.
System.exit(0);
}

}

public static void main(String[] args) {
ScreenSaver1 obj = new ScreenSaver1();
}
}
  1. 您不能在此程序中使用任何类型的循环。
  2. 您的成员变量必须是私有(private)的。
  3. 您的屏幕保护程序类必须继承自 JPanel 类,并且它必须具有 JFrame 成员变量。
  4. 您的程序必须跟踪它在屏幕上绘制的形状数量,并且在绘制完 30 个形状后,它必须清空屏幕。这最容易通过调用基类(JPanel 的)paintComponent 方法来完成。
  5. 您应该使用 Timer 对象生成 ActionEvents 来驱动您的屏幕保护程序。将计时器设置为每 500 毫秒触发一次 ActionEvent。这将导致您的 actionPerformed 方法执行,它应该简单地调用 repaint 方法。调用重绘方法会导致您的 paintComponent 方法执行。
  6. 您的 paintComponent 方法将完成所有工作,以选择面板边界内的随机颜色、随机形状和随机位置,并绘制该形状,同时记录已绘制的形状数量。
  7. 创建一个私有(private)方法,该方法在调用时返回随机颜色,该颜色可以是任何可能的随机颜色值。将从您的 paintComponent 方法和您的 KeyListener 事件处理程序调用此方法,如下所述。
  8. 您的 paintComponent 方法必须使用至少四种您随机选择的不同形状……椭圆形、矩形、实心椭圆形、实心矩形、多边形、直线等。
  9. 您绘制的形状的大小和位置必须根据屏幕大小而有所不同。所绘制的每个形状的至少一部分必须在屏幕上可见。
  10. 将屏幕保护程序设置为屏幕的完整尺寸。
  11. 将 KeyListener 添加到您的框架中。 KeyListener 必须处理 KeyPressed 事件。
  12. 您的 KeyListener 必须在按下“x”键时调用 System.exit。
  13. 按下“z”键时,您的 KeyListener 必须将窗口大小从全屏大小更改为一半大小(屏幕宽度和高度的一半),或从一半大小更改回完整大小。也就是说,每次按下“z”键时,显示的大小都会在全屏和半屏之间切换。这需要更改框架的大小并调用重绘。提示:请记住,为了重绘背景,您需要将计数设置回 0。
  14. 按下“r”键时,您的 KeyListener 必须将显示屏的背景颜色更改为随机颜色。这意味着它必须获得新的随机颜色并使用新的随机颜色调用面板的 setBackground。然后它也必须调用重绘。提示:请记住,为了重绘背景,您需要将计数设置回 0。

最佳答案

您的 key 处理程序应该像这样实现 keyPressed:

            public void keyPressed(KeyEvent e)
{
if (e.getKeyChar() == 'x') {
System.out.println("Exiting");
System.exit(0);
}
else if (e.getKeyChar() == 'z') {
System.out.println("Resizing");
}
}

关于java - 使用不循环的keylistener退出程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235464/

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