Как изменить цвет JPanel с помощью ActionListener - PullRequest
0 голосов
/ 14 апреля 2020

Я изучаю основы Java Апплет и Swings. Я пытаюсь простой код. Я хочу изменить цвет моей панели при нажатии кнопки. Вот код:

Простой Gui. java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SimpleGui implements ActionListener {
    JFrame frame;
    JButton button;

    public static void main(String[] args) {
        SimpleGui gui = new SimpleGui();
        gui.go();
    }

    public void go() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button = new JButton("changes colour");
        button.addActionListener(this);

        MyPanel drawPanel = new MyPanel();

        frame.getContentPane().add(BorderLayout.SOUTH,button);
        frame.getContentPane().add(BorderLayout.CENTER,drawPanel);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }

    //event handling method
    public void actionPerformed(ActionEvent event) {
        frame.repaint();
        button.setText("color changed");
    }
}

class MyPanel extends JPanel {

    public void paintCompenent(Graphics g) {
        g.setColor(Color.green);
        g.fillRect(20, 50, 100, 100);
    }
}

Я добавил несколько операторов println для отладки и обнаружил, что paintComponent метод не вызывается. Не могли бы вы исправить меня. Где я делаю ошибку. Вся моя реализация неверна?

1 Ответ

1 голос
/ 14 апреля 2020

paintComponent должно быть protected (см. здесь ).

изменить код на:

class MyPanel extends JPanel {
     protected void paintComponent(Graphics g) {
        g.setColor(Color.green);
        g.fillRect(20, 50, 100, 100);
    }
}  

Результат:

enter image description here

...