奇怪的图形错误:组件A的副本涂在组件B上.帮助! (Java)的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了奇怪的图形错误:组件A的副本涂在组件B上.帮助! (Java)的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1592字,纯文字阅读大概需要3分钟。
内容图文
![奇怪的图形错误:组件A的副本涂在组件B上.帮助! (Java)的](/upload/InfoBanner/zyjiaocheng/826/a8a08a1d42354e57b431f0ce68f4cd50.jpg)
我做了一个简单的绘画程序,你可以使用画笔工具绘制一些不同的颜色并擦除(只需涂上白色).
它工作正常,但我有一个非常奇怪的图形错误,导致工具面板和最后一个鼠标悬停的颜色/工具图标绘在绘图面板的顶部.
实现:该框架包含两个JPanel扩展:ToolPanel和DrawPanel. ToolPanel拥有两个JPanel,它们包含颜色和工具按钮.按钮是JComponent的扩展.
链接到屏幕截图(我不允许发布图像):
注意:第二个“假”工具面板中的按钮不是可以点击的实际按钮,我可以在它上面绘画.如果我在左角的“假”颜色按钮上绘画,当我鼠标悬停一个新颜色并用鼠标进入绘图面板时,它将再次重新绘制.
注意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,也许这会导致一些问题?我不这样做的原因是,如果我这样做,它将一直重新绘制背景,因此只有我最后绘制的点才会可见.不确定超级调用是否实际解决了问题,或者假面板是否也被背景覆盖.也许我需要以其他方式解决这个问题?或者是别的什么?
谢谢!
解决方法:
自从我使用Swing已经有很长一段时间,但你的基本问题是背景没有被重新绘制.这意味着正确的工作组件应该每次都绘制整个区域,因此您必须保存并重新绘制任何先前的绘图.
您可以尝试将组件设置为透明(检查setTransparent或setOpaque方法),但由于已经好几年了,我不确定具体结果是什么.
内容总结
以上是互联网集市为您收集整理的奇怪的图形错误:组件A的副本涂在组件B上.帮助! (Java)的全部内容,希望文章能够帮你解决奇怪的图形错误:组件A的副本涂在组件B上.帮助! (Java)的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。