2012-06-01 37 views
5

我正在玩Java图形类,我只是想知道 - 什么时候需要调用方法repaint()?我试着评论它,它似乎没有影响我的输出GUI。不过,我已经看到它在我读过的Java GUI代码中使用了很多。有谁会介意解释何时使用它,何时不使用它?repaint()Java中的方法

回答

1

在大多数应用程序中,这绝对不是必需的,因为它们会自动处理它(用于常见操作,例如更改按钮上的文本值并将数据添加到列表框中)。

通常,只有当你做出某种改变时,摆动才会自动取出 - 例如,你没有使用布局管理器并手动调整组件大小(因为通常布局管理器会重新绘制其布局管理器组件在必要时)。

+0

非常感谢! –

0

当你启动你的应用程序时,你“画”你的GUI。

当你想重新绘制你的GUI时,你需要调用repaint(),因为你已经改变了内部的东西。

如果你想删除一个按钮,你需要删除它(或使其不可见),那么你需要调用validate()repaint()重新计算(重新绘制)GUI。

1

repaint()刷新视图(组件),因此无论何时对组件进行任何更改,都必须调用它。举例来说,如果你旋转图形组件,您必须拨打电话到repaint()才能看到含有成分的变化

+0

谢谢你的解释!实际上,我正在尝试制作我的图形,以便当用户单击x轴(它是声速图)时,图形将放大图形的特定部分。我有点卡住了如何去做。你有什么想法? –

+0

这就是我可能要做的事情:获取getX()和getY()给出的点的坐标。然后创建一个图形** g **,这将是我要显示和重新绘制(g)'的区域。 –

0

我能想到的唯一的东西:

new Thread() { 
    @Override 
    public void run() { 
    while (ClassName.this.isVisible()) { 
     ClassName.this.updateStatusLabel(); 
     ClassName.this.validate(); 
     ClassName.this.repaint(50L); 
     try { 
     Thread.sleep(1000); 
     } catch (final InterruptedException e) { 
     Log.log(e); 
     } 
    } 
    } 
}.start(); 

假设你有上面的代码在JDialog的构造函数中。什么updateStatusLabel确实是检查一个布尔变量,公开或通过一个方法可设置,并将JLabel的图标设置为基础的布尔值。如果您不验证并重新绘制GUI,那么在另一个事件(很可能是用户触发的事件)被引发之前,修改将不会显示。而且,如果用户正在等待标签显示某个图标,那么可以说,它表示如果设备可通过Internet访问,他/她将永远不会互动(或者至少,您延迟了互动非常)。