我目前正在修复(相当旧的)应用程序中的错误:

它涉及具有延迟加载功能和快速搜索文本字段的树。假定以下情况:


有人在快速搜索文本字段中输入字符串
这导致查询在后台发送到服务器,并使用输入的名称搜索可用的树节点,并以下拉样式提供它们。
用户从下拉列表中选择一个项目。
树中位于所选元素路径中的所有节点都将展开,从而导致惰性加载树加载...好吧...一堆节点。
该树(带有滚动条)会滚动,因此将在视图中显示所选元素。


第1步至第4步工作正常,但第5步仅在树不需要延迟加载元素但之前已经加载树的情况下才有效。

经过一段时间的调试,我发现这是因为计算出多少滚动条的代码使用了表示树节点的AWT元素的尺寸。但是,如果元素是延迟加载的,则尚未计算尺寸,因此代码无效。我猜尺寸计算将在重绘方法期间发生。或无论如何:为时已晚。

如何获得AWT立即计算组件尺寸?

该代码在AWT的顶部使用Thinlet

最佳答案

看来您的问题更多是在Thinlet方面,而不是在AWT方面。看来这是Thinlet中的错误。 Thinlet会在实际滚动之前尝试对要滚动到的节点进行布局,但这对于节点没有正确实现。

使用以下补丁可以使thinlet正常工作:

--- Thinlet.java        2005-03-28 18:15:28.000000000 +0200
+++ Thinlet_new.java    2013-02-06 16:06:23.707530066 +0100
@@ -166,6 +166,10 @@

        private void doLayout(Object component) {
                String classname = getClass(component);
+               while ("node" == classname) {
+                 component = getParent(component);
+                 classname = getClass(component);
+               }
                if ("combobox" == classname) {
                        if (getBoolean(component, "editable", true)) {
                                Image icon = getIcon(component, "icon", null);

关于java - AWT:立即计算组件尺寸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14713304/

10-10 11:49