我目前正在学习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对象生成ActionEvent,以驱动屏幕保护程序.将计时器设置为每500毫秒触发一次ActionEvent.这将导致您的actionPerformed方法执行,该方法应该简单地调用repaint方法.调用repaint方法会使您的paintComponent方法执行.
> paintComponent方法将完成所有工作,以选择面板边界内的随机颜色,随机形状和随机位置,然后绘制该形状,并保持已绘制形状的数量.
>创建一个私有方法,该方法在调用时返回随机颜色,该颜色可以是任何可能的随机颜色值.如下所述,将从您的paintComponent方法和KeyListener事件处理程序中调用此方法.
>您的paintComponent方法必须使用至少四种不同的形状,这些形状是您从以下各项中随机选择的:椭圆,矩形,实心椭圆,实心矩形,多边形,直线等.
>您绘制的形状的大小和位置必须根据屏幕的大小而有所不同.每个绘制的形状的至少一部分必须在屏幕上可见.
>使您的屏幕保护程序全屏显示.
>将KeyListener添加到框架. KeyListener必须处理KeyPressed事件.
>按下“ x”键时,KeyListener必须调用System.exit.
>按下“ z”键时,您的KeyListener必须将窗口的大小从全屏大小更改为一半大小(屏幕的宽度和高度的一半),或从一半大小更改为完整大小.也就是说,每按一次“ z”键,显示屏的大小就会在全角和半角之间切换.这需要更改框架的大小并调用重绘.提示:请记住,为了重新绘制背景,您需要将count设置回0.
>按下“ r”键时,您的KeyListener必须将显示背景的颜色更改为随机颜色.这意味着它必须获得新的随机颜色,并使用新的随机颜色调用面板的setBackground.然后,它还必须调用重绘.提示:请记住,为了重新绘制背景,您需要将count设置回0.