1

クリックされた親とそのすべてのサブノードの JXTreeTable で行を選択する必要があります。非推奨の JXTreeTable を使用する古い Swingx では、TreeSelectionListener を使用して実行できます。私はリスナーを持っていました (mTable は非推奨の JXTreeTable です):

 mTable.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {    
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                selectionPerformered(evt);
            }
        });

およびメソッド選択が実行されました(evt):

private void selectionPerformered(javax.swing.event.TreeSelectionEvent evt) {
        boolean unlock = true;
        TreePath parentPath = evt.getNewLeadSelectionPath();
        if (parentPath != null) {
            ListSelectionModel list = mTable.getSelectionModel();
            TreeNode node = ((TreeNode) (parentPath.getLastPathComponent()));
            if (node.getChildCount() > 0) {
                TreePath path = new TreePath(
                        ((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(0)));
                int begin = mTable.getRowForPath(path);
                path = new TreePath(
                        ((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(node.getChildCount() - 1)));
                int end = mTable.getRowForPath(path);
                list.addSelectionInterval(begin, end);
            }
            unlock = false;
        }
        disableUnlock(unlock);
    }

「Components」イベントをクリックすると、list.addSelectionInterval(begin, end); で数回発生しました。選択は正常に機能し、次のようになりました。

良いもの

しかし、新しい swingx 1.6 では、新しい JXTreeTable を使用して、デバッグ モードで [コンポーネント] をクリックすると、このイベントは 1 回だけ発生するため、結果は次のようになります。

悪いもの

たとえば、「admin」プログラムをクリックして、この行と次の 3 行をその子とともに選択するとします。しかし、「コンポーネント」をクリックすると、この行とすべての子の行、およびすべての子の子を選択する必要があります。私が何を意味するか知っていれば:)このイベントを発生させる方法はありますか?それとも、選択を行う別の方法がありますか?

4

0 に答える 0