Как динамически изменить цвет фона JFrame? - PullRequest
1 голос
/ 20 апреля 2020

Мне было интересно, как бы я изменил этот блок кода, чтобы иметь возможность динамически менять цвет фона, который переключается с (красный -> черный -> зеленый -> черный -> синий -> черный -> красный) и l oop начинается снова. Цвет фона должен постоянно меняться за тик. Прямо сейчас у меня есть метод рендеринга, который будет постоянно работать над l oop, и мне интересно, может ли кто-нибудь изменить его, чтобы он также включал динамическое изменение цвета c.

private void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, WIDTH, HEIGHT);


        g.dispose();
        bs.show();
    }

1 Ответ

0 голосов
/ 20 апреля 2020

Здравствуйте и добро пожаловать на ТАК!

Вы не используете свинг вправо. Вы должны делать весь свой рендеринг в paintComponent, который вызывается автоматически при необходимости Однако paintComponent в JFrame ничего не делает, так как JFrame содержит ContentPane (JFrame.getContentPane), и это фон, который вы хотите изменить. Изменение фона области содержимого должно быть простым:

myJFrame.getContentPane().setBackground(newColor);

Однако не все (J) компоненты закрашивают свой фон (JLabel для одного), поэтому вам может потребоваться создать JPanel и использовать myJFrame.setContentPane(...); перед тем, как приведенный выше код

Примечание. Чтобы сделать Swing однопоточным (как и должно быть), используйте SwingUtilities.invokeLater (...) для создания / изменения классов Swing.

Примечание 2: Зацикливание в разгаре должно быть сделано, используя javax.swing.Timer. Вам не нужно все oop: установите новый фон в прослушивателе кликов, а затем вызовите repaint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...