Создание логического столбца в редактируемом JXTreeTable
У меня есть JXTreeTable
структура с 5 столбцами, и я должен сделать последний (логического типа) редактируемым.
Я пытался что-то, гуглил в течение нескольких часов, я искал здесь на SO, и я нашел похожие вопросы, но они не помогают в моем конкретном случае (это потому, что они дали ответы на вопросы с JTrees
или просто JTables
а не с JXTreeTable
составная часть).
Я уже указал getColumnClass(int column)
метод в моей древовидной модели, чтобы сделать логические ячейки в последнем столбце как JCheckBoxes
и isCellEditable(Object node, int column)
способ вернуть столбец и сделать его редактируемым.
Я фактически заполняю этот столбец запросом, который читает файл из базы данных и устанавливает для некоторых из этих ячеек значение true, если они удовлетворяют требованиям.
Вот ссылка на то, как на самом деле выглядит мой графический интерфейс:
Дайте мне знать, если вам понадобятся какие-то части моего кода, и спасибо за советы!
Вот конструкция дерева:
DefaultMutableTreeNode albero = initTree();
final JXTreeTable binTree = new JXTreeTable(new MyTreeModel(albero));
Highlighter highligher = HighlighterFactory.createSimpleStriping(HighlighterFactory.BEIGE);
binTree.setHighlighters(highligher);
binTree.setShowGrid(false);
binTree.setShowsRootHandles(true);
binTree.setEditable(true);
configureCommonTableProperties(binTree);
binTree.setTreeCellRenderer(new TreeTableCellRenderer());
Определение TreeModel:
public class MyTreeModel extends AbstractTreeTableModel {
private String [] titles = {"Utente", "Radice Menù", "Programma", "Descrizione", "Abilitazione"};
public MyTreeModel(DefaultMutableTreeNode root) {
super(root);
}
@Override
public String getColumnName(int column) {
if (column < titles.length)
return (String) titles[column];
else
return "";
}
@Override
public boolean isCellEditable(Object node, int column) {
return column == 4;
}
@Override
public int getColumnCount() {
return titles.length;
}
@Override
public Class getColumnClass(int column) {
if (column == 4 )
return Boolean.class;
else
return String.class;
}
@Override
public Object getValueAt(Object arg0, int arg1) {
if(arg0 instanceof TableRowData) {
TableRowData data = (TableRowData)arg0;
if(data != null) {
switch(arg1) {
case 0: return data.getUtente();
case 1: return data.getRott();
case 2: return data.getProgramma();
case 3: return data.getDescrizione();
case 4: return data.getFlag();
}
}
}
}
if(arg0 instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode dataNode = (DefaultMutableTreeNode)arg0;
TableRowData data = (TableRowData)dataNode.getUserObject();
if(data != null) {
switch(arg1) {
case 0: return data.getUtente();
case 1: return data.getRott();
case 2: return data.getProgramma();
case 3: return data.getDescrizione();
case 4: return data.getFlag();
}
}
}
@Override
public Object getChild(Object arg0, int arg1) {
if(arg0 instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode nodes = (DefaultMutableTreeNode)arg0;
return nodes.getChildAt(arg1);
}
return null;
}
@Override
public int getChildCount(Object arg0) {
if(arg0 instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode nodes = (DefaultMutableTreeNode)arg0;
return nodes.getChildCount();
}
return 0;
}
@Override
public int getIndexOfChild(Object arg0, Object arg1) {
if(arg0 instanceof DefaultMutableTreeNode && arg1 instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) arg0;
return parent.getIndex((DefaultMutableTreeNode) arg1);
}
return 0;
}
@Override
public boolean isLeaf(Object node) {
return getChildCount(node) == 0;
}
return null;
}
И класс, который реализует методы get/set для данных строки:
public class TableRowData {
private String utente = null;
private String rott;
private String programma;
private boolean flag;
private String descrizione;
private boolean isRoot;
public TableRowData(String Utente, String Rott, String Programma, String Descrizione, Boolean Flag, boolean isLeaf) {
this.utente = Utente;
this.rott = Rott;
this.programma = Programma;
this.flag = Flag;
this.descrizione = Descrizione;
this.isRoot = isLeaf;
}
/**
* @return the isRoot
*/
public boolean isRoot() {
return isRoot;
}
/**
* @param isRoot the isRoot to set
*/
public void setRoot(boolean isLeaf) {
this.isRoot = isLeaf;
}
public String getUtente() {
return utente;
}
public void setUtente(String Utente) {
this.utente = Utente;
}
public String getRott() {
return rott;
}
public void setRott(String Rott) {
this.rott = Rott;
}
public String getProgramma() {
return programma;
}
public void setProgramma(String Programma) {
this.programma = Programma;
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean Flag) {
this.flag = Flag;
}
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
}