5 つの列を持つJXTreeTable
構造があり、最後の (ブール型の) 列を編集可能にする必要があります。
私は何かを試し、何時間もグーグルで検索し、ここでSOを検索し、同様の質問を見つけましたが、私の特定のケースでは役に立ちません(これは、コンポーネントに関する問題JTrees
または単純な問題に関する回答を提供したためです)。JTables
JXTreeTable
getColumnClass(int column)
ツリー モデルで、最後の列のブール値セルを としてレンダリングJCheckBoxes
するisCellEditable(Object node, int column)
メソッドと、列を返して編集可能にするメソッドを既に指定しています。
実際には、データベースからファイルを読み取り、要件を満たしている場合にそれらのセルの一部を true に設定するクエリをその列に入力しています。
私のGUIが実際にどのように見えるかへのリンクは次のとおりです。
私のコードの一部を表示する必要がある場合はお知らせください。アドバイスに感謝します!
ツリー構造は次のとおりです。
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;
}
}