Связки клавиш JTree - PullRequest
       64

Связки клавиш JTree

0 голосов
/ 22 января 2020

Я пытаюсь повторно связать клавишу F2 для JTree, как написано здесь https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html. Вот код:


System.out.println(DataModelTree.getInputMap(JComponent.WHEN_FOCUSED).get(KeyStroke.getKeyStroke("F2")));
//This gives string "startEditing"

DataModelTree.getActionMap().put("startEditing", new javax.swing.AbstractAction() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
        System.out.println("F2 pressed");
    }
});

Попробовал и этот вариант:

DataModelTree.getActionMap().put(DataModelTree.getInputMap(JComponent.WHEN_FOCUSED).get(KeyStroke.getKeyStroke("F2")), new javax.swing.AbstractAction() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
         System.out.println("F2 pressed");
    }
});

Попытался создать отдельный неанонимный класс действий. Пытался предварительно удалить записи в InputMap и родительском InputMap. Пытался выполнить повторную привязку в других режимах: WHEN_ANCESTOR_OF_FOCUSED_COMPONENT и WHEN_IN_FOCUSED_WINDOW. Ничего не работает Связки клавиш JTree остаются прежними.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 22 января 2020

Извините, но мы не можем ответить на ваш вопрос, потому что мы не видим ваш полный код. Пожалуйста, предоставьте исполняемый класс , который воспроизводит ваше некорректное поведение, чтобы мы могли легче определить, где ваша ошибка.

Вот небольшой пример того, как обеспечить редактирование дерева для клавиши F2

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <code>TestTree</code>.
 */
public class TestTree {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TestTree()::startUp);
    }

    private void startUp() {
        JTree tree = new JTree();
        tree.setEditable(true);
        tree.getActionMap().put(tree.getInputMap().get(KeyStroke.getKeyStroke("F2")), new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (tree.getSelectionPath() != null) {
                    tree.startEditingAtPath(tree.getSelectionPath());
                } else {
                    JOptionPane.showMessageDialog(tree, "Nothing selected");
                }
            }
        });
        JFrame frm = new JFrame("edit tree");
        frm.add(new JScrollPane(tree));
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setSize(300, 200);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}
...