Поскольку это домашнее задание, я не предоставляю весь код. Я предоставлю отрывки.
Вот GUI, который я создал. Я wi sh Я мог бы показать его как анимированный GIF.
Я добавил кнопку остановки, чтобы остановить вращение слова.
Я написал код, разбив проблему на более мелкие и мелкие шаги, а затем закодировав каждый из шагов. Я провел много тестов GUI, прежде чем закончил его. Некоторые тесты не прошли, и мне пришлось пересмотреть код.
Я написал 6 классов. Главный класс создал JFrame
, группу панелей с буквами и панель управления внизу. Я написал класс LetterPanel
для создания панели из одной буквы. Я написал 3 actionListener
классов, один для JComboBox
, один для кнопки поворота и один для кнопки остановки. Я написал класс Animation
, который меняет буквы каждую секунду.
Вот цвета, которые я использовал для получения 4 оттенков зеленого.
Color[] colors = { new Color(50, 117, 1),
new Color(65, 159, 0), new Color(88, 201, 5),
new Color(107, 242, 2)
};
Настройка основного JPanel
удерживать объекты 4 LetterPanel
было немного сложно. Вот как я это сделал.
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
Класс LetterPanel
расширил класс JPanel
и заменил метод paintComponent
. Сначала я вызвал метод super.paintComponent
. Всегда сначала вызывайте метод super.paintComponent
. Затем я закрасил фон в цвет. Затем я нарисовал букву.
Чтобы нарисовать букву в каждом LetterPanel
, я использовал следующий код.
/**
* Draw a String centered in the middle of the panel.
*
* @param g2d The Graphics2D instance.
* @param text The String to draw.
* @param font The Font to draw with.
*/
public void drawCenteredString(Graphics2D g2d,
String text, Font font) {
FontMetrics metrics = g2d.getFontMetrics(font);
int x = (getWidth() - metrics.stringWidth(text)) / 2;
int y = ((getHeight() - metrics.getHeight()) / 2) +
metrics.getAscent();
g2d.setFont(font);
g2d.drawString(text, x, y);
}
JComboBox actionListener получает выбранное слово из JComboBox. В учебнике Oracle Как использовать поля со списком подробно рассказывается, как я настроил слово JComboBox.
Кнопка поворота actionListener
проверяет, отмечены ли оба поля JCheckBox
. Затем он проверяет, не отмечено ли ни одно из полей JCheckBox
. Наконец, он запускает поток Animation
.
Кнопка остановки останавливает поток Animation
.
Поток Animation
вращает слово и делает паузу на 1 секунду, чтобы вы могли увидеть вращение.
Вот пробег l oop.
@Override
public void run() {
while (running) {
updatePanel();
sleep(1000L);
if (leftSelected) {
word = rotateLeft(word);
} else {
word = rotateRight(word);
}
}
}
Вот мои методы вращения.
private String rotateLeft(String word) {
return word.substring(1) + word.substring(0, 1);
}
private String rotateRight(String word) {
return word.substring(word.length() - 1) +
word.substring(0, word.length() - 1);
}