Есть ли способ переопределить метод paintComponent внутри MenuItemActionPerformed? - PullRequest
0 голосов
/ 19 апреля 2020

Я создал демонстрационную программу, которая рисует необычный набор объектов. Это достигается путем переопределения метода paintComponent класса, который расширяет JPanel. Этот класс является экземпляром, и объекты и текст окрашиваются в JPanel.

. Я хотел бы нарисовать эти объекты в JPanel, который ранее содержался в JFrame, в ответ на щелчок в меню.

Метод paintComponent должен быть переопределен в

private void demoMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

}

Возможно ли переопределить метод paintComponent ранее определенного JPanel?

Спасибо

1 Ответ

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

Можно ли переопределить метод paintComponent ранее определенного JPanel?

Да, вы предоставляете свойства панели. Затем метод paintComponent () проверяет состояние этих свойств при выполнении пользовательской рисования.

Таким образом, все, что делает метод actionPerformed (), это получает ссылку на панель и затем устанавливает свойство.

Например, у вас может быть базовый c класс, который рисует прямоугольник:

public class RectanglePanel extends JPanel
{
    private boolean squareFilled = false;

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        g.setColor( getBackground() );
        g.drawRect(10, 10, 50, 50);

        if (squareFilled)
        {
            g.setColor( getForeground() );
            g.fillRect(10, 10, 50, 50);
        }
    }

    public void toggleSquareFilled()
    {
        squareFilled = !squareFilled;
        repaint();
    }
}

Так что код ActionListener будет просто:

rectanglePanel.toggleSquareFilled();

Приведенный выше код предполагает, что " rectanglePanel "- это переменная экземпляра, указывающая на вашу RectanglePanel.

...