簡體   English   中英

將對象保存在JTree中,但更改顯示的名稱(java swing)嗎?

[英]Save objects in a JTree but change the displayed name (java swing)?

我做了一個JTree,並用ArrayList對象填充了它。 當我使用GUI顯示JTree的內容時,我不想看到存儲對象的內存地址,而是看到了自定義的String。

例如:我將此對象添加到我的樹中:

DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(workspaces.get(i));

我在GUI上看到的是:

package.workspace@1df38f3

我想要替代文字而不是

package.workspace@1df38f3

要顯示。 如何修復我的代碼以支持此功能?

JTree將在添加的項目上調用toString函數並顯示它。 如果您可以為Workspace對象編寫toString ,那么可以解決您的問題。 如果無法修改Workspace對象,則應創建一個具有所需toString的包裝對象。

嘗試@Override ArrayList中對象的“ toString()”方法

class YourObject{
...
      @Override
      public String toString(){
           return "your string formatted here";
      }

...
}

閱讀有關TreeCellRenderer的信息並創建自己的一個,例如擴展DefaultTreeCellRenderer。 在方法中

Component getTreeCellRendererComponent(JTree tree, Object value,
                   boolean selected, boolean expanded,
                   boolean leaf, int row, boolean hasFocus)

提供任何所需的邏輯

我建議擴展JTree並重寫convertValueToText( JTree javadoc )。 默認實現是調用toString,但是您可以覆蓋它以生成所需的任何文本。 無需包裝所有數組對象或覆蓋toString進行顯示(我更喜歡將toString留給調試描述,而不是顯示文本)。

正如任何有關Java的好書或教程所教您的,學習覆蓋到java.lang.Object.toString()

閱讀Java語言API,它明確指出所有子類都應重寫toString() 這樣做(就您而言)使這些對象准備好(通過參考值)傳遞給設置GUI文本的代碼。

暫無
暫無

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

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