0

5 つの列を持つJXTreeTable構造があり、最後の (ブール型の) 列を編集可能にする必要があります。

私は何かを試し、何時間もグーグルで検索し、ここでSOを検索し、同様の質問を見つけましたが、私の特定のケースでは役に立ちません(これは、コンポーネントに関する問題JTreesまたは単純な問題に関する回答を提供したためです)。JTablesJXTreeTable

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;
    }
}
4

0 に答える 0