亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JTree 在更改節點名稱時更改 lineStyle

JTree 在更改節點名稱時更改 lineStyle

撒科打諢 2023-04-19 16:29:53
更新 JTree 的節點會更改 lineStyle(下圖),我不知道為什么會發生這種情況以及如何防止它發生,因為我的代碼不會在發生這些更改時更新 CellRenderer 的任何屬性。我在 Java 中有一個客戶端-服務器應用程序,我在其中向服務器發送數據請求,并根據使用服務器的客戶端請求從數據庫中請求一些數據,然后將結果發送回客戶端。然后將結果顯示在 JTree 中,該 JTree 已經可以正常工作。因此,JTree 具有一些靜態節點(如標題)和一些動態節點,其中靜態節點僅使用值進行更新(這意味著始終顯示整體輪廓)并且動態節點可能會作為一個請求的結果被附加和刪除為了下一個的結果。目前,當我意識到這個問題時,我只實現了靜態節點:當我更改我的節點顯示的值時,它也會將 lineStyle 屬性更改為有些奇怪,甚至無法選擇。這是 JTree 在更新節點之前和之后的外觀圖片:這就是我更新節點時發生的情況:正如您所看到的那樣,從“檢驗批號”節點開始的垂直線應該一直向下消失,而其他線則保持在應該的位置。我使用此代碼更新節點:public void renameNode(DefaultMutableTreeNode node, String renamedNode) {    node.setUserObject(renamedNode);    model.nodeChanged(node);}這里參數“節點”是我重命名的節點,字符串是我設置的新值(至少這是我對這里發生的事情的理解),并且在我的類的構造函數中使用以下行訪問模型:model = (DefaultTreeModel) tree.getModel();。我不知道這對于解決方案是否重要,但目前我并沒有真正定義 TreeModel,因為我使用根節點啟動我的 JTree,然后動態附加所有節點。然而,在我看來,它似乎與 TreeCellRenderer 有一定關系。對于我目前使用此配置的渲染器:renderer.setSize(tree.getParent().getMaximumSize());renderer.setLeafIcon(null);renderer.setOpenIcon(null);renderer.setClosedIcon(null);renderer.setDisabledIcon(null);tree.putClientProperty()我還嘗試根據JTree 上的 Oracle 教程使用強制 JTree 使用斜線(默認情況下它總是應該這樣做)。在這一點上,我完全不知道可能是什么問題。對我來說唯一有意義的事情可能是 TreeCellRenderer,但我在這里也可能完全錯了。任何幫助將非常感激。
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

經過一些故障排除后,我終于意識到,每次我填充我的 JTree 時,與可以看到的相反,模型沒有重置為根節點的 0 個子節點,而是將更改的節點作為新節點堆疊為根節點的子節點(所以我有 7、14、21,... 子節點,每次填充我的 JTree 時都是 +7)。

這樣做的原因是我不知道我必須model.reload()在調用后調用((DefaultMutableTreeNode) tree.getModel().getRoot()).removeAllChildren();(我需要這樣做才能完全刪除樹,以便我的數據只在 JTree 中列出一次)。

現在 JTree 在重新設置之前被完全清除,使用renameNode()我原來的帖子中提供的方法添加節點可以完美地工作。

希望這會幫助將來可能遇到類似問題的其他人。


查看完整回答
反對 回復 2023-04-19
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號