[英]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.