Java重新绘制只更新画布的一部分
我有一个程序,在窗口中有一个画布,里面有两个圆圈(你可以通过点击画布来移动其中一个圆圈) 它在windows和iOS上运行时没有问题,但在ubuntu上有这个问题: 当我使用窗口左上角的组合框更改选定的圆时,这些圆将消失,并且仅在画布的左上角可见,该区域在我切换选定的圆之前被组合框项目覆盖 此外,当我拖动应用程序窗口使其离开屏幕或将另一个窗口放在我的窗口上时,圆圈开始在画布的隐藏部分可见 你能解释一下,为什么会这样,我做错了什么Java重新绘制只更新画布的一部分,java,awt,repaint,Java,Awt,Repaint,我有一个程序,在窗口中有一个画布,里面有两个圆圈(你可以通过点击画布来移动其中一个圆圈) 它在windows和iOS上运行时没有问题,但在ubuntu上有这个问题: 当我使用窗口左上角的组合框更改选定的圆时,这些圆将消失,并且仅在画布的左上角可见,该区域在我切换选定的圆之前被组合框项目覆盖 此外,当我拖动应用程序窗口使其离开屏幕或将另一个窗口放在我的窗口上时,圆圈开始在画布的隐藏部分可见 你能解释一下,为什么会这样,我做错了什么 我的程序的代码在这里:您正在破坏绘制链,您应该调用super.pa
我的程序的代码在这里:您正在破坏绘制链,您应该调用
super.paint
,但是对于JPanel
,您应该重写paintComponent
(在进行任何自定义绘制之前调用super.paintComponent
)
看一看,要了解更多细节,很难给出任何想法(代码不短)。在我的系统(肉桂2.4.8)上,一切都画得很好。无论如何,添加
super.paint()
不需要太多努力,也不会造成任何伤害
以下内容很有趣:您可以直接在main()
方法中创建帧。但现在,应在事件队列中创建Swing/AWT主框架:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new BlochovyKruhy2();
}
});
}
而不是
public static void main(String[] args) {
new BlochovyKruhy2();
}
也许是因为我用画布而不是JPanel。但是,当我创建JPanel时,当我移动圆时,它开始做一些疯狂的事情。在iOS上工作,这是一个很好的功能。你正在打破绘制链,你应该调用super.paint,但在JPanel的情况下,你应该重写paintComponent(并调用super.paintComponent)