簡體   English   中英

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

[英]JTree changes lineStyle when changing node's name

域名注冊地址:

更新 JTree 的節點會更改 lineStyle(下圖),我不知道為什么會發生這種情況以及如何防止它發生,因為我的代碼在發生這些更改時沒有更新 CellRenderer 的任何屬性。


我有一個 Java 客戶端 - 服務器應用程序,我向服務器發送數據請求,並根據使用服務器的客戶端請求從數據庫請求一些數據,並將結果發送回客戶端。 然后將結果顯示在 JTree 中,該 JTree 已經可以正常工作。

因此,JTree 有一些靜態(如標題)和一些動態節點,其中靜態節點僅使用值更新(這意味着始終顯示整體輪廓),並且動態節點可能會作為一個請求的結果附加並刪除為下一個結果。

目前,當我意識到這個問題時,我只實現了靜態節點:當我更改節點顯示的值時,它也會將 lineStyle 屬性更改為有些奇怪,甚至不應該從中進行選擇。

這是 JTree 在更新節點之前和之后的樣子的圖片:

JTree 默認大綱

這就是我更新節點時發生的情況:

更新的 JTree

正如您所看到的,從“檢驗批號”節點開始的垂直線應該一直向下消失,而其他線則保持在應有的位置。

我使用以下代碼更新節點:

public void renameNode(DefaultMutableTreeNode node, String renamedNode) {
    node.setUserObject(renamedNode);
    model.nodeChanged(node);
}

這里的參數“node”是我重命名的節點,String是我設置的新值(至少這是我對這里發生的事情的理解),並且在我的類的構造函數中使用這一行訪問模型: model = (DefaultTreeModel) tree.getModel(); .

我不知道這對於解決方案是否重要,但目前我並沒有真正定義 TreeModel,因為我使用根節點啟動我的 JTree,然后動態附加所有節點。 然而,在我看來,它似乎與 TreeCellRenderer 有很大關系。 對於渲染器,我目前使用此配置:

renderer.setSize(tree.getParent().getMaximumSize());

renderer.setLeafIcon(null);
renderer.setOpenIcon(null);
renderer.setClosedIcon(null);
renderer.setDisabledIcon(null);

我還嘗試根據 JTree 上的Oracle 教程使用tree.putClientProperty()強制 JTree 使用傾斜線(默認情況下它總是應該這樣做)。

在這一點上,我很不知道可能是什么問題。 唯一對我來說是發生這種情況的原因可能是 TreeCellRenderer ,但是我在這里也可能完全錯誤。 任何幫助將非常感激。

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

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

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

希望這能幫助其他將來可能面臨類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM