我制作了一个简单的绘画程序,您可以在其中使用画笔工具绘制一些不同的颜色并擦除(只需涂成白色)。
它工作正常,但我有一个非常奇怪的图形错误,它导致工具面板和最后一个鼠标悬停的颜色/工具图标被绘制在绘图面板的顶部。
实现:框架包含两个JPanel 扩展:一个ToolPanel 和一个DrawPanel。ToolPanel 包含两个 JPanel,它们分别保存颜色按钮和工具按钮。按钮是 JComponent 的扩展。
链接到屏幕截图(我不允许明显地发布图片):
注意:第二个“假”工具面板中的按钮不是可以点击的实际按钮,我可以在上面绘画。如果我在左角的“假”颜色按钮上绘画,当我将鼠标悬停在新颜色上并用鼠标进入绘图面板时,它将再次重新绘画。
注 2:我曾经有一个 JMenuBar,它也画在绘图板上。每次在窗口(不仅仅是面板)失去焦点后,每次将鼠标悬停在绘图面板上时都会重新绘制它。
一些代码:(我知道工具选择实现不是最好的: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-method 中调用 super.paintComponent,也许这会导致一些问题?我没有这样做的原因是,如果我这样做,它将一直重新绘制背景,因此只有我最后绘制的点可见。不确定超级调用是否真的解决了问题,或者假面板是否也被背景覆盖。也许我需要以其他方式解决这个问题?或者是别的什么?
谢谢!