Ale*_*lin 5 java swing jtreetable
使用本手册(http://www.comp.nus.edu.sg/~cs3283/ftp/Java/swingConnect/tech_topics/tables-trees/tables-trees.html)我正在尝试为我的项目创建树表摆动用户界面。
在我的表类的构造函数中,我重新定义了这样的渲染:
public class JTreeTable extends JTable {
public JTreeTable(ITreeTableModel treeTableModel) {
super();
...
setDefaultRenderer(ITreeTableModel.class, tree);
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中 treeTableModel 是我的实现
interface ITreeTableModel extends TreeModel
Run Code Online (Sandbox Code Playgroud)
在结果表中看起来接近我想要的,但我有几个问题:

我的代码中的字段(ID)定义为对象,但实际上它代表数字(1、2、3 等)。如何更改字段 ID 的表示?
我的表中的节点不会扩展。但
public int getChildCount(Object parent_object_id)
返回数字 > 0
ps我知道可能没有足够的信息来直接回答,但我至少需要指导我可以继续我的调查。
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
当前发生的情况是,您的 Cell 渲染器返回对象实例元素 ID(例如 DictionaryItem@11abb71),而不是获取对象并调用 getID() 函数。
您可以在 TreeCellRenderer 示例中找到额外的示例和信息。
与第二个问题相关,请参阅TreeModel example上的示例。也许您也可以尝试通过代码扩展行。如果“+”图标变为“-”,则可能意味着 getChildCount 运行良好,但不起作用的是 getChild(int row) ,它将返回 null 或无效的树行元素。