2010-03-15 5 views
0

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

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

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

+0

Когда вы нажимаете на текстовое поле, в котором каретка расположена на символ, на который вы нажали. Таким образом, «Ввести» то же самое не имеет никакого смысла, так как мы не знаем, какого персонажа вы хотите притвориться, что нажали. Поскольку вы не можете описать свое требование, отправьте сообщение SSCCE: http: // sscce. org, который показывает, что происходит в данный момент. – camickr

ответ

2

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

Я уже думал о создании частного метода, который вызывался обеими функциями, но часть кода должна знать, на какой 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, но при нажатии кнопки ввода я не сделал знаете, как вызвать JTextField, который был только что введен, поэтому я хотел имитировать щелчок на JTextField (который требует фокуса). Наверное, я должен был просто объяснить всю мою проблему.

спасибо.

2
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. Это было украдено от here.

+0

Мне нужно нажать клавишу, чтобы имитировать mouseclick, а не просто имитировать нажатие клавиши. Я хочу, чтобы клавиша нажала на функцию mouseclick. Это не для модульного тестирования. Что я хочу, когда пользователь нажимает кнопку ввода, он вызывает тот же код, что и при нажатии в любом месте кадра. – Vox

0

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

Тем не менее, не имеет смысла для меня.

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

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

б) другие доходы компоненты фокус

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

1

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