1

JXTreeTablefromを使用しorg.jdesktop.swingxて階層構造データを表示しているため、いくつかの親ノードといくつかの子ノードがそれらに接続されています。私が望むのはrenderer、親ノードと子ノードで異なることです。

例: JXTreeTable が親ノードを表示する場合、最初の列を文字列としてレンダリングし、他の列を JCheckBox でレンダリングする必要があります。それ以外の場合、JXTreeTable が子ノードを表示する場合、すべてのセルを文字列としてレンダリングする必要があります。

AbstractTreeTableModelまず、このコードを拡張する myTreeTableModel を記述します。

@Override
public Class<?> getColumnClass(int column) {
    if (column == 0)
        return String.class;
    return Boolean.class;
}

親ノードではすべて問題ありませんが、空のセルが必要な子ノードでも空の JCheckBox が表示されます。nullメソッドに戻っgetValueAt(....)ても問題は解決しません。そこで、Renderer クラスを使用することを考えましたが、どこから始めればよいかわかりません。次のような疑似レンダラーを作成します。

private class CustomCellRender implements TableCellRenderer {
   @Override
   public Component getTableCellRendererComponent(JTable table,
        Object value, boolean isSelected, boolean hasFocus, int row,
        int column) {
   setOpaque(true);
   JComponent component = null;
    if (value instanceof Parent_Node) {
        if (column == 0)
            component = new JLabel();
        else
            component = new JCheckBox();
    } else if (value instanceof Child_Node) {
        component = new JLabel();
    }
    return component;
   }
}

そして私はこれを次のように設定しました:

myTreeTable.setDefaultRenderer(Object.class, new CustomCellRender());

どこが間違っているか、この問題を解決するためのヒントを教えてもらえますか? お時間をいただきありがとうございます。

編集:System.out.println(...)メソッドにテストを挿入しようとしましたgetTableCellRendererComponentが、呼び出されません。したがって、JTreeTable はこのメソッドを実行しません。

4

0 に答える 0