【问题标题】:Is there a way to override the paintComponent method within an MenuItemActionPerformed?有没有办法覆盖 MenuItemActionPerformed 中的paintComponent 方法?
【发布时间】:2020-08-02 04:30:18
【问题描述】:

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

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

需要在 a 中重写 paintComponent 方法

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

}

是否可以覆盖之前定义的JPanelpaintComponent 方法?

谢谢

【问题讨论】:

  • 要更改已创建对象的方法吗?
  • 你的问题解决了吗?

标签: java swing overriding jpanel paintcomponent


【解决方案1】:

是否可以覆盖先前定义的 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 的实例变量。

【讨论】:

  • 非常感谢。我会调整您的解决方案并尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2013-06-24
  • 1970-01-01
  • 2020-08-29
  • 2012-03-29
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多