【问题标题】:repaint() Method in JavaJava 中的 repaint() 方法
【发布时间】:2013-09-13 15:55:34
【问题描述】:

我正在玩一些 Java 图形类,我只是想知道——什么时候需要调用 repaint() 方法?我尝试将其注释掉,但它似乎并没有影响我的输出 GUI。不过,我已经看到它在我读过的 Java GUI 代码中使用了很多。有人介意解释一下什么时候使用它,什么时候不使用它?

【问题讨论】:

    标签: java awt repaint


    【解决方案1】:

    repaint() 刷新视图(组件),因此每当您对组件进行任何更改时,都必须调用它。例如,如果您旋转图形组件,则必须调用 repaint() 才能看到包含组件的更改

    【讨论】:

    • 感谢您的解释!我实际上是在尝试制作我的图形,以便当用户单击 x 轴(它是一个声速图)时,该图形将放大图形的该特定部分。我有点不知道该怎么做。你有什么想法吗?
    • 我可能会这样做:获取我点击的点的坐标,由getX()getY() 给出。然后创建一个图形 g 这将是我要显示的区域和repain(g)
    【解决方案2】:

    在大多数 Swing 应用程序中从来没有真正必要,因为它们会自动处理它(用于常见操作,例如更改按钮上的文本值和向列表框添加数据)。

    通常,只有在您进行了某种更改时,swing 才会自动拾取 - 例如,您没有使用布局管理器并且正在手动调整组件的大小(因为通常布局管理器会重新绘制其组件必要时)。

    【讨论】:

      【解决方案3】:

      当您启动应用程序时,您“绘制”了您的 GUI。

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

      如果你想删除一个按钮,你需要移除它(或者让它不可见)然后你需要调用validate()或者repaint()来重新计算(重新绘制)GUI。

      【讨论】:

        【解决方案4】:

        我唯一能想到的东西:

            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 访问,他/她将永远不会进行交互(或者,至少,您正在延迟交互这么多)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-22
          • 1970-01-01
          • 2021-09-22
          相关资源
          最近更新 更多