В настоящее время я изучаю Java, и я пытаюсь создать программу экранной заставки. Самое важное правило - не использовать какие-либо петли. другим ключевым критерием является использование «x» для выхода из программы и «z» для перехода с полноэкранного режима на полуэкран. Моя первая наклонность заключалась в том, чтобы использовать setDefaultCloseOperation вместе с keylistener для выхода из программы, но я не нашел способа сделать это. кто-нибудь может помочь мне понять, как это сделать, не используя цикл.Выход из программы с помощью 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 фигур, она должна очистить экран. Это проще всего сделать, вызвав метод paintComponent базового класса (JPanel).
- Вы должны использовать объект Timer для генерации ActionEvents для управления экранной заставкой. Установите таймер для запуска ActionEvent каждые 500 миллисекунд. Это вызовет ваш actionPerformed метод, который должен просто вызвать метод repaint. Вызов метода repaint вызывает выполнение метода paintComponent.
- Ваш метод paintComponent будет выполнять всю работу, чтобы выбрать случайный цвет, случайную форму и случайное положение в пределах вашей панели, и нарисуйте эту фигуру, сохранив подсчет количества фигур, которые были нарисованы.
- Создайте частный метод, который возвращает случайный цвет, когда он называется, который может быть любым возможным случайным значением цвета. Этот метод будет вызываться из вашего метода paintComponent и из обработчика событий KeyListener, как описано ниже.
- Ваш метод paintComponent должен использовать по крайней мере четыре разные формы, которые вы произвольно выбираете из ... овальных, прямоугольных, заполненных овалов, заполненных прямоугольников, полигонов, линий и т. Д.
- Размер и положение фигур, которые вы рисуете, должны меняться в зависимости от размера экрана. По крайней мере, часть каждой фигуры должна быть видна на экране.
- Сделайте свой экранный экран полным размером экрана.
- Добавьте ключевое устройство в рамку. KeyListener должен обрабатывать события KeyPressed.
- Ваш KeyListener должен вызвать System.exit при нажатии клавиши «x».
- Когда клавиша «z» нажата, ваш KeyListener должен изменить размер окна с полноэкранного размера до половины размера (половина ширины и высоты экрана) или от половины размера до полного размера. То есть, каждый раз, когда нажата клавиша «z», размер дисплея переключается между полным и половинным размером. Это требует изменения размера рамки и вызова перерисовки. СОВЕТ. Помните, что для того, чтобы получить фоновый рисунок, вам нужно будет установить счетчик на 0.
- Когда нажата клавиша «r», ваш KeyListener должен изменить цвет фона дисплея на Случайный цвет. Это означает, что он должен получить новый случайный цвет и вызвать setBackground панели с новым случайным цветом. Затем он должен вызвать перерисовку. СОВЕТ. Помните, что для того, чтобы получить фон для перерисовывания, вам нужно будет установить счетчик на 0.
Какой бред ... Дать заставку без петель ... –
сообщение, что вы пробовали. –
@MartijnCourteaux: Мне было бы интересно, как инструктор решает проблему, не полагаясь на цикл событий ОС. –