Java重绘仅更新我的Canvas

时间:2015-06-12 06:48:25

标签: java awt repaint

我有这个程序,我在一个窗口中有一个带有2个圆圈的画布(你可以通过点击画布移动其中一个圆圈)。

它在Windows和iOS上没有问题,但在ubuntu上有这个问题:

当我使用窗口左上角的组合框更改选定的圆圈时,圆圈消失,仅在画布的左上角可见,在我变形之前被组合框项目覆盖的区域中选定的圈子。

当我拖动应用程序窗口使其离开屏幕或在窗口上放置另一个窗口时,圆圈开始在隐藏的画布部分中可见。

请你解释一下,为什么会发生这种情况,我做错了什么?

我的程序代码在这里:http://pastie.org/private/rm0gw2awx6d7iztyabzs7q

2 个答案:

答案 0 :(得分:1)

你打破了油漆链,你应该打电话给outlet,但是对于UITextField,你应该覆盖super.paint(并呼叫JPanel在你做任何自定义绘画之前)

请查看Painting in AWT and SwingPerforming Custom Painting了解详情

答案 1 :(得分:0)

很难给出任何想法(这段代码不短)。在我的系统(Cinnamon 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();
}