gpt4 book ai didi

java - 奇怪的图形错误 : a copy of component A is painted on component B. 帮助! ( java )

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:02 26 4
gpt4 key购买 nike

我制作了一个简单的绘画程序,您可以在其中使用画笔工具绘制一些不同的颜色并删除(只需涂成白色)。

它工作正常,但我有一个非常奇怪的图形错误,它导致工具面板和最后一个鼠标悬停的颜色/工具图标被绘制在绘图面板的顶部。

实现:该框架包含 JPanel 的两个扩展:一个 ToolPanel 和一个 DrawPanel。 ToolPanel 包含两个 JPanel,它们包含颜色按钮和工具按钮。按钮是 JComponent 的扩展。

截图链接(我不允许张贴图片):

enter image description here

注意:第二个“假”工具面板中的按钮不是可以单击的实际按钮,我可以在上面作画。如果我在左下角的“假”颜色按钮上绘制,当我将鼠标悬停在一种新颜色上并使用鼠标进入绘图面板时,它将再次重新绘制。

注意 2:我曾经有一个 JMenuBar,它也被绘制在 drawpanel 中。每次在窗口(不仅仅是面板)失去焦点后将鼠标悬停在绘图面板上时,它都会重新绘制。

一些代码:(我知道工具选择实现不是最好的 :P)

DrawPanel 的 paintComponent 方法:

    public void paintComponent(Graphics g) { 
if(isMousePressed) {
if(tool == "BRUSH") {
g.setColor(color);
g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);
} else if(tool == "ERASER") {
g.setColor(getBackground());
g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);

}
}
}

如果有任何我遗漏的相关信息或代码,请告诉我。

假设:我没有在 DrawPanels paintComponent 方法中调用 super.paintComponent,也许这会导致一些问题?我没有这样做的原因是,如果我这样做,它会一直重新绘制背景,所以只有我最后绘制的点是可见的。不确定 super 调用是否真的解决了问题,或者假面板是否也被背景覆盖了。也许我需要以其他方式解决这个问题?或者是别的什么?

谢谢!

最佳答案

自从我使用 Swing 以来已经有很长时间了,但是您的基本问题是背景没有被重新绘制。这确实意味着正常工作的组件应该每次都绘制整个区域,因此您必须保存并重新绘制之前的任何绘图。

您可以尝试将您的组件设置为透明(检查 setTransparent 或 setOpaque 方法),但由于已经过去了几年,我不确定确切的结果是什么。

关于java - 奇怪的图形错误 : a copy of component A is painted on component B. 帮助! ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com