Как написать код для отображения каждой буквы в каждой панели JPanel и как повернуть его. (JFrame, NetBeans) - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в Java, и в моем классе мне было поручено разработать код для следующего вопроса, я смог только разработать дизайн, после этого я не знал, как продолжить добавление действий на каждую кнопку.

Это вопрос:

https://www.chegg.com/homework-help/questions-and-answers/write-java-application-creates-frame-similar-one-shown--four-letter-word-shown-four-panels-q52352988

Если кто-нибудь когда-либо решал это, поделитесь, пожалуйста. Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 20 июня 2020

Поскольку это домашнее задание, я не предоставляю весь код. Я предоставлю отрывки.

Вот GUI, который я создал. Я wi sh Я мог бы показать его как анимированный GIF.

Rotate Word GUI

Я добавил кнопку остановки, чтобы остановить вращение слова.

Я написал код, разбив проблему на более мелкие и мелкие шаги, а затем закодировав каждый из шагов. Я провел много тестов 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);
    }
...