Как вы симулируете клик по JTextField? Эквивалент JButton doClick ()? - PullRequest
0 голосов
/ 15 марта 2010

Я работаю над проектом Java, и мне нужно, чтобы нажатие клавиши имитировало щелчок на JTextField. То, что я ищу, является эквивалентом метода JButton doClick ().

Я пытаюсь, чтобы нажатие клавиши "enter" выполняло ту же функцию, что и нажатие на JTextField.

Не уверен, какую другую информацию предоставить. Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 16 марта 2010

ОК, спасибо за помощь. Я думаю, что я не был ясен, но теперь я нашел способ заставить мой код работать благодаря некоторым вашим идеям.

Я уже думал о создании частного метода, который вызывался обеими функциями, но часть кода должна знать, на какой JTextField щелкает пользователь. Я обнаружил .getFocusOwner (), который позволяет мне ссылаться на текущий элемент с помощью Focus (JTextField). Как то так

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_ENTER) {
            Object which = JFrame.getFocusOwner();                
            if(which.getClass() == JTextField.class)
                foo(which);
         }
    }

    public void mouseClicked(MouseEvent e) {                
        Object which = e.getSource();
        if(which.getClass()== JTextField.class) {
            foo(which);
        }
    }

Возможно, был лучший способ сделать это, но в основном у меня был массив JTextFields, и программа работала правильно, когда пользователи нажимали на следующий JTextField, но при нажатии enter я не знал, как вызвать JTextField, который был только что введен, поэтому я хотел смоделировать щелчок на JTextField (который требует фокусировки). Думаю, мне следовало объяснить всю мою проблему.

Спасибо.

2 голосов
/ 15 марта 2010
public void simulateKey(KeyEvent e, Component c) {
   Field f = KeyEvent.class.getField("focusManagerIsDispatching");
   f.setAccessible(true);
   f.set(e, Boolean.TRUE);
   c.dispatchEvent(e);
}

Отправьте «Enter» на ваш JTextField. Это было украдено у здесь .

1 голос
/ 15 марта 2010

Если вы хотите, чтобы одно и то же происходило и из-за мыши, и из-за нажатия клавиши, разве не имеет смысла иметь метод, вызываемый обоими? То есть у вас есть метод типа fieldClicked, который вызывается как MouseListener, так и KeyListener. Это было бы легче отладить - меньше было бы разбираться с событиями, что может быть очень запутанным - и, вероятно, более читабельно.

0 голосов
/ 15 марта 2010

Что я хочу, это когда пользователь нажимает введите, он вызывает тот же код, что и когда они щелкают в любом месте кадра

Все еще не имеет смысла для меня.

Когда пользователь нажимает в любом месте кадра, происходит пара вещей:

а) текстовое поле теряет фокус

б) некоторые другие компоненты получают фокус

Вы можете добавить ActionListener в текстовое поле. ActionListener вызывается при нажатии клавиши Enter. Но тогда как вы догадались, где на рамке генерировать щелчок мышью? Для меня это похоже на случайную логику.

...