【问题标题】:paintComponent() leaving behind previously drawn images after repaint()paintComponent() 在 repaint() 之后留下先前绘制的图像
【发布时间】:2010-11-03 07:22:05
【问题描述】:

我有一个绘制 .png 图像的 JPanel。每个图像有 2 个副本,以表示它是否已被选中。一张图片是正常的,一张有彩色边框以表示已进行选择。 (为了论证,你可以将这些图像视为简单的形状)

通过 MouseListeners 确定绘制哪个版本的图像。如果用户选择 image1,则 image1 将显示其突出显示的版本。

一般来说这是可行的,但是在 repaint() 时,图像的突出显示版本被留下了。由于高亮版本比普通版本略大,您可以看到它突出在新绘制的普通图像后面(重叠)。

我认为 repaint() 应该完全处理当前的图纸并从头开始,这里似乎不是这种情况。下面是总体思路,blackClicked 在 MouseListener 内切换。

所以我的问题是如何让 repaint() 摆脱其当前绘制的图像并从头开始。

另外,如果有更简单的方法来实现所有这些,请告诉我,制作 2 个图像副本是一项繁琐的工作。

@Override
public void paintComponent(Graphics g){

    Graphics2D g2 = (Graphics2D) g;

    if(blackClicked)
        g2.drawImage(blackSelected,0, 0, null);
    else
        g2.drawImage(black,0, 0, null);

    g2.drawImage(green,0, 0, null);
}

【问题讨论】:

    标签: java swing repaint paintcomponent


    【解决方案1】:

    如何让 repaint() 摆脱当前绘制的图像并从头开始。

    你的意思是,如何让 repaint 在绘制之前用它的背景颜色填充组件?加起来怎么样

    g2.setColor(getBackground());
    g2.fillRect(0, 0, getWidth(), getHeight());
    

    paintComponent()的顶部?

    【讨论】:

    • 不错!一定喜欢简单的修复。
    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多