首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AWT:立即计算组件尺寸

AWT:立即计算组件尺寸
EN

Stack Overflow用户
提问于 2013-02-05 17:24:32
回答 1查看 94关注 0票数 1

我目前正在修复(相当旧的)应用程序中的一个bug:

它涉及一个树,它有一个延迟加载函数和一个快速搜索文本字段。假设以下情况:

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

步骤1到步骤4工作得很好,但是步骤5只在树不需要延迟加载元素但之前已经加载了树的情况下才能工作。

经过一段时间的调试,我发现这是因为计算出滚动多少的代码使用了表示树节点的AWT元素的维度。但是,如果元素是延迟加载的,则尚未计算维度,因此代码无效。我想尺寸计算将在重绘方法中进行。或者至少:太迟了。

如何使AWT立即计算组件大小?

代码在AWT之上使用廷莱特

EN

回答 1

Stack Overflow用户

发布于 2013-02-06 15:11:03

看起来您的问题更多的是在Thinlet方面,而不是在AWT方面。它看起来像是在Thinlet中的一个bug。在进行实际滚动之前,Thinlet确实尝试对要滚动到的节点进行布局,但这在节点上没有正确实现。

使用下面的修补程序使瘦在您的情况下正常工作:

代码语言:javascript
代码运行次数:0
运行
复制
--- 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14713304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档