使用本手册(http://www.comp.nus.edu.sg/~cs3283/ftp/Java/swingConnect/tech_topics/tables-trees/tables-trees.html)我尝试为我的项目的Swing用户界面创建树表。
在我的类的构造函数中,我重新定义了这样的渲染:
public class JTreeTable extends JTable {
public JTreeTable(ITreeTableModel treeTableModel) {
super();
...
setDefaultRenderer(ITreeTableModel.class, tree);
...
}
}
其中treeTableModel是我的
实现interface ITreeTableModel extends TreeModel
在结果表中看起来接近我想要的东西,但我有几个问题:
我的代码中的字段(ID)定义为Object,但实际上它代表数字(1,2,3等)。如何更改字段ID的表示?
我表格中的节点不会展开。 但是
public int getChildCount(Object parent_object_id)
返回数字> 0
P.S。我知道可能没有足够的信息可以直接回答,但我至少需要指导我继续进行调查。
答案 0 :(得分:0)
与您的第一个问题相关,您应该实现TreeCellRenderer。 猜测你会做类似的事情:
//and override also all the other functions of TreeCellRenderer
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value)
.getUserObject();
if (userObject instanceof YourClass) {
YourClass yourElement = (YourClass) userObject;
if(col==0) titleLabel.setText(yourElement.getID());
if(col==1) titleLabel.setText(yourElement.getName());
if(col==2) titleLabel.setText(yourElement.getParentID());
if (selected) {
renderer.setBackground(backgroundSelectionColor);
} else {
renderer.setBackground(backgroundNonSelectionColor);
}
renderer.setEnabled(tree.isEnabled());
returnValue = renderer;
}
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
}
return returnValue;
}
}
目前发生的事情是您的Cell Renderer返回Object实例元素ID(例如DictionaryItem @ 11abb71),而不是获取对象并调用getID()函数。
上找到更多示例和信息与您的第二个问题相关,请参阅TreeModel example上的示例。也许您也可以尝试按代码扩展行。 如果" +"图标正在变为" - "它可能意味着getChildCount运行良好但它不起作用的是getChild(int行),它将返回null或无效的树行元素。