我想创建一个包含多列的Tree
。我找到了这个教程here(德语)和这个answer(英语)。我想在一列中添加复选框,但我不知道该怎么做。当我向JTreeTable
返回一个复选框时,执行中显示的内容是复选框详细信息而不是复选框对象。如何获得this之类的内容,如下图所示?
答案 0 :(得分:2)
如 Taking the New Swing Tree Table for a Spin 所示,引用here,RowModel
的实施必须从getColumnClass()
返回正确的类型,并从getValueFor()
。类型Boolean.class
的值将使用JCheckBox
呈现。以下实现产生引用的图像:
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Date.class;
case 1:
return Long.class;
case 2:
return Boolean.class;
case 3:
return Boolean.class;
case 4:
return Boolean.class;
default:
assert false;
}
return null;
}
@Override
public Object getValueFor(Object node, int column) {
File f = (File) node;
switch (column) {
case 0:
return new Date(f.lastModified());
case 1:
return f.length();
case 2:
return f.canRead();
case 3:
return f.canWrite();
case 4:
return f.canExecute();
default:
assert false;
}
return null;
}
我无法选中复选框。
您需要在true
的实施中针对所需的列返回isCellEditable()
,并相应地更新node
实施中的setValueFor()
。当单元格编辑器结束时,将调用setValueFor()
的实现,因此请验证它是否更新了稍后由getValueFor()
返回的相同的值。 (可选)您需要使用EventListenerList
API中规定的方案实施管理TreeModel
列表的TreeModelListener
方法; DefaultTreeModel
来源code就是一个很好的例子。