Как установить JComponent для перемещения с помощью TAB вместо CTRL + TAB без использования isManagingFocus () - PullRequest
0 голосов
/ 08 января 2019

У меня есть класс, который представляет собой пользовательский компонент-свинг, расширяющий JComponent. Я пытаюсь сделать так, чтобы подкомпоненты этого пользовательского компонента были бы перемещаемыми по фокусу простым нажатием TAB или SHIFT + TAB. Вместо этого они кажутся доступными только при нажатии CTRL + TAB или CTRL + SHIFT + TAB по умолчанию, независимо от того, что я указываю иначе. Я сослался на ответ из здесь , хотя мой компонент не является JTextArea, и я попытался установить клавиши перемещения фокуса непосредственно с помощью кода ниже в конструкторе, но безрезультатно.

setFocusCycleRoot(true);
setFocusTraversalKeysEnabled(true);
Set<AWTKeyStroke> forwardKeys = new HashSet<>();
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
Set<AWTKeyStroke> backwardKeys = new HashSet<>();
backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_DOWN_MASK));
setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);

Я также попытался добавить ключевой слушатель к компоненту, чтобы эффективно сделать то же самое с кодом ниже, но это также не сработало.

addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_TAB) {
            if (e.isShiftDown()) {
                transferFocusBackward();
            } else {
                transferFocus();
            }
            e.consume();
        }
    }
});

Я обнаружил, что получаю именно то поведение, которое мне нужно, если я не включаю ни один из приведенных выше блоков кода, а переопределяю метод isManagingFocus (), чтобы всегда возвращать true, но я бы предпочел не делать этого, как isManagingFocus () устарела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...