Проблема обработки ключевого события JTextField - PullRequest
0 голосов
/ 04 марта 2010

Разве .getKeyCode () не возвращает значение int ключа? Поскольку я установил свой JTextField для прослушивания прослушивателя клавиш, а в методе с типом клавиши я проверяю, какая клавиша была нажата. Вот фрагмент моего кода:

JTextField jtf = new JTextField( );
jtf.addKeyListener( this );
.
.
.
public void keyTyped( KeyEvent e )
{
  if( e.getKeyCode( ) == KeyEvent.VK_ENTER ) System.out.println( "pressed enter" );
}

но каждый раз, когда я набираю enter в JTextField, ничего не происходит, т.е. ничего не печатается.

Ответы [ 5 ]

0 голосов
/ 05 апреля 2012

Вы должны реализовать KeyListener Inteface и переопределить метод keyTyped в вашем определении класса для использования

jtf.addKeyListener(this).

Замените вышеуказанную строку на

jtf.addKeyListener(new KeyAdapter(){

    @Override
    public void keyTyped(KeyEvent e) {
        if( e.getKeyCode( ) == KeyEvent.VK_ENTER )   
            System.out.println( "pressed enter" );
    }
});
0 голосов
/ 01 апреля 2012

Я только что придумал лучший способ. Вы должны поместить все свои ключевые методы во внутренний класс прямо под вашим основным классом. Поместите код конструктора GUI в метод конструктора снова вне вашего метода main. сейчас. если ваш внутренний метод реализует интерфейс KeyListener и создает три абстрактных метода, связанных с указанным интерфейсом, вы используете только метод keyTyped (KeyEvent e). внутри этого метода создайте экземпляр переменной int с именем keyHit и назначьте ее для e.getKeyChar (); затем поместите оператор if, который сообщает, что если (keyHit == '\ n') \ n будет соответствовать клавише ENTER,

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

0 голосов
/ 12 апреля 2010

Я думаю, вы сравниваете неправильные значения. e.getKeyCode() возвращает ключ, тогда я думаю, KeyEvent.VK_ENTER это что-то действительно другое.

0 голосов
/ 01 апреля 2012

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

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

возможно, вам следует сначала проверить, действительно ли ваш обработчик событий вызывается при нажатии чего-либо ... или если ваш обработчик событий может получать объекты KeyEvents, я считаю, что проблема заключается в том ... чтобы он работал, компонент должен иметь фокус ... Учебник по Java

...