1

我正在开发一个应用程序,其中所有 UI 组件都是通过 XML 文件定义的。我阅读了 xml 并根据它组成了 UI。在用户进行一些更改后,会提供一个新的 XML 并相应地刷新 UI。现在我遇到了一些非常烦人的渲染问题,尤其是在几个滚动区域中,UI 的任何部分都被剪切(并且只有在我调整窗口大小时才可见)或者滚动条已经滚动到某个点,但它应该只是显示内容的顶部。

我认为这是一个事件调度线程问题,并在这里找到了一些非常有用的信息:http ://www.javapractices.com/topic/TopicAction.do?Id=153

您可以在此处阅读:“该线程(EDT)在组件实现后变为活动状态:pack、show 或 setVisible(true) 已被调用”

解析 XML 不在 EDT 中完成,并且还实例化组件并将它们添加到它们的父面板。只有在创建了所有组件之后,它们才会最终通过 EDT 添加到 MainPane。然而,在某些情况下,创建组件并将它们添加到面板中似乎已经启动了 EDT。所以事情变得一团糟。

是否有人详细了解哪些方法调用 pack、show 或 setVisible(true) 并因此启动 EDT?

非常感谢

4

1 回答 1

2

我对滚动窗格有同样的问题,请尝试在它们上设置以下属性:

scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);

正如评论中所说,所有 Swing 组件都必须在 EDT 上创建,否则您会遇到奇怪的事情。

于 2013-01-07T12:47:56.863 回答