相关疑难解决方法(0)

Java Swing revalidate()vs repaint()

我正在整理一个Swing应用程序,我常常想要替换JPanel的内容.要做到这一点,我正在打电话removeAll(),然后添加我的新内容,然后打电话revalidate().

但是我发现旧内容仍然可见(虽然被新内容遮挡了).如果我添加调用repaint()revalidate(),它按预期工作.

我确信在其他场合我经历过只是打电话revalidate()就足够了.

所以基本上我的问题是 - 我是否需要调用这两个函数,如果没有,我什么时候应该调用它们?

java swing

206
推荐指数
4
解决办法
21万
查看次数

SwingUtilities中的invokeAndWait方法

请解释SwingUtilities中的invokeAndWait()方法.我无法理解这一点. 非常清楚地解释一下. 如果你尝试一个例子,那将是很有帮助的.

编辑添加@ noob扩展问题:

什么是不太清楚这个

这是一个修改过的用法示例:

import javax.swing.SwingUtilities;

public class InvokeAndWaitStuff 
{
    public static void main(String[] args)
    {
        final Runnable doHelloWorld = new Runnable() {
             public void run() {
                 System.out.println("Hello World on " + Thread.currentThread());
             }
         };

         Thread appThread = new Thread() {
             public void run() {
                 try {
                     SwingUtilities.invokeAndWait(doHelloWorld);
                 }
                 catch (Exception e) {
                     e.printStackTrace();
                 }
                 System.out.println("Finished on " + Thread.currentThread());
             }
         };
         appThread.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello World on Thread[AWT-EventQueue-0,6,main]
Finished on Thread[Thread-0,5,main]
Run Code Online (Sandbox Code Playgroud)

为什么这很重要?:

导致doHelloWorld.run()在AWT事件派发线程上同步执行.此调用将阻塞,直到处理完所有待处理的AWT事件,并且(然后)doHelloWorld.run()返回.当应用程序线程需要更新GUI时,应使用此方法. …

java swing

19
推荐指数
1
解决办法
3万
查看次数

什么时候需要在swing组件上调用revalidate()以使其刷新,何时不需要?

在处理swing组件时,以及在运行时更改组件时,一个(通常)需要在组件上调用revalidate()方法以便刷新它们.

确定是否需要重新验证组件的规则是什么?当某个组件上的某些特性发生变化时,swing会自动调用revalidate()吗?

java validation swing invalidation

14
推荐指数
1
解决办法
5474
查看次数

标签 统计

java ×3

swing ×3

invalidation ×1

validation ×1