Создание логического столбца в редактируемом 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;
    }
}

0 ответов

Другие вопросы по тегам