我正在开发一个应用程序,其中所有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?
Thanks to lot
我有相同的问题与滚动窗格,尝试设置以下属性:
scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
正如在评论中所说的,所有的Swing组件都必须在EDT上创建,否则会发生奇怪的事情。