0

我有一个JXTreeTable有 5 列的结构,我必须使最后一个(布尔类型)可编辑。

我已经尝试了任何东西,在谷歌上搜索了几个小时,我在这里搜索了 SO,我发现了类似的问题,但它们对我的具体情况没有帮助(那是因为他们给出了关于组件问题JTrees或简单问题JTables而不是JXTreeTable组件问题的答案)。

我已经getColumnClass(int column)在树模型中指定了使最后一列中的布尔单元格呈现为JCheckBoxesisCellEditable(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