パネルはツリー内部のナビゲーションとは関係がなく、フォーカスに関連していません。これはすべて、ツリーの actionMap の keyBindings を介して処理されます。したがって、解決策は、デフォルトのナビゲーション アクションをカスタム アクションに置き換えることです。以下のコード スニペットは、デフォルトに委譲することによってそれを行います。
final JXTree tree = new JXTree();
tree.expandAll();
final Action delegate = tree.getActionMap().get("selectNext");
Action action = new AbstractAction("navigateNonLeaf") {
@Override
public void actionPerformed(ActionEvent e) {
boolean searching = true;
while (searching) {
TreePath old = tree.getLeadSelectionPath();
delegate.actionPerformed(e);
TreePath path = tree.getLeadSelectionPath();
// nothing happened, back off
if (areSame(old, path)) break;
Object last = path.getLastPathComponent();
if (!tree.getModel().isLeaf(last)) {
searching = false;
}
}
}
// TBD: implement "end of tree"
private boolean areSame(TreePath old, TreePath path) {
return path.equals(old);
}
};
tree.getActionMap().put("selectNext", action);