gpt4 book ai didi

java - AWT:立即计算组件尺寸

转载 作者:行者123 更新时间:2023-12-01 04:52:39 25 4
gpt4 key购买 nike

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

它涉及一棵树,该树具有延迟加载功能并且具有快速搜索文本字段。假设以下场景:

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

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

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

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

代码使用 Thinlet在 AWT 之上。

最佳答案

看起来您的问题更多是在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com