Как закрыть JTextArea с помощью клавиши escape - PullRequest
0 голосов
/ 07 марта 2019

В моем методе ниже, JTextArea будет отображаться при нажатии на кнопку helpBut .После отображения текста справки (текст, написанный на JTextArea : helpText ), я хотел бы закрыть этот текст, нажав клавишу escape .Я попытался использовать метод addKeyListener (ниже), но он не сработал.

public void clickButton (JButton helpBut, JTextArea helpText)
{
   helpBut.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            JPopupMenu helpPopup = new JPopupMenu();
            helpPopup.add(helpText);
            if (!helpPopup.isVisible()) {
                helpPopup.show(helpBut,20,20);
            } else {
                helpPopup.setVisible(false);
            }
        }
    });
   helpText.addKeyListener(new KeyAdapter() {
         @Override
         public void keyPressed(KeyEvent e) {
            if(helpText.isVisible()) {
               if(e.getKeyCode() == KeyEvent.VK_ESCAPE)
                 helpText.setVisible(false);
               }
           }
    });
}

Я выяснил, что компилятор вызывает метод addKeyListener только если я нажимаю на JtextArea .

1 Ответ

0 голосов
/ 07 марта 2019

Большое спасибо, я пользуюсь сочетаниями клавиш, как совет snowy_1803, и это работает.

helpPopup.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "closeJTextArea");
    helpPopup.getActionMap().put("closeJTextArea", new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            helpPopup.setVisible(false);
        }
    });
...