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