首页 > 解决方案 > 有没有办法覆盖 MenuItemActionPerformed 中的paintComponent 方法?

问题描述

我创建了一个演示程序来绘制一组不寻常的对象。它通过覆盖paintComponent扩展类的方法来做到这一点JPanel。这个类被实例化,对象和文本被绘制在JPanel.

我想在JPanel以前包含在 a中的 a 中绘制这些对象JFrame,以响应对它的单击菜单。

paintComponent方法需要在一个

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

}

是否可以覆盖paintComponent先前定义的方法JPanel

谢谢

标签: javaswingoverridingjpanelpaintcomponent

解决方案


是否可以覆盖先前定义的 JPanel 的paintComponent 方法?

是的,您向面板提供属性。然后,paintComponent() 方法在进行自定义绘制时检查这些属性的状态。

所以 actionPerformed() 方法所做的就是获取对面板的引用,然后设置属性。

例如,您可以有一个绘制矩形的基本类:

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 的实例变量。


推荐阅读