Кнопка Java действует как клавиша ввода

Я новичок в Java и нахожусь в процессе создания графического интерфейса приложения CLI для игры в покер. Для продолжения требуется «Введите ключ». Я попытался выяснить, есть ли какой-нибудь обработчик событий для «Enter Key», чтобы я мог изменить это событие на кнопку мыши. Но, к сожалению, я не смог найти ничего подобного. Теперь я подумал о передаче возврата каретки в Java Console onClick Event. Я пытался:

ContinueBtn = new JButton();
ContinueBtn.addMouseListener(this);
 .
 .
 .
 public void mouseReleased(MouseEvent e) {
     System.out.println("\r\n");

     //OR
     char c = (char) KeyEvent.VK_ENTER;
     System.out.println(c)

     //OR
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
     out.write("\r\n");
     out.newLine();
     out.flush();

     //OR
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
     out.write((char)10); /*OR*/ out.write((char)13);
 }

Это все еще не работает. Кто-нибудь может подсказать, что мне делать?


person patanni    schedule 24.12.2011    source источник
comment
пожалуйста, изучите соглашения об именах Java и придерживайтесь их   -  person kleopatra    schedule 25.12.2011


Ответы (4)


Добавьте правильный Action или ActionListener, затем реализуйте KeyBindings, выходная форма KeyBindings должна быть javax.swing.Action, внутри этого вызова Action

myButton.doClick()

которые вызывают Action или ActionListener, добавленные к JButton

person mKorbel    schedule 24.12.2011
comment
Не могли бы вы объяснить, что я должен написать в событии OnClick Jbutton? - person patanni; 25.12.2011

Для «Ввода» на JButtons вы, вероятно, захотите использовать JRootPane.setDefaultButton(). И JWindow, и JDialog имеют метод getRootPane().

Единственная хитрость в том, что окно/диалог уже должны быть видны, чтобы установить кнопку по умолчанию. Обычно я просто переопределяю setVisible() в окнах, которым нужна кнопка по умолчанию:

public void setVisible(boolean b) {
    if (b) {
        getRootPane().setDefaultButton(button);
  }

    super.setVisible(b);
}
person AngerClown    schedule 24.12.2011
comment
Если окно/диалоговое окно должно быть видимым для вызова setDefaultButton, этот метод не будет работать. Он вызывает setDefaultButton перед тем, как сделать видимыми JWindow или JDialog. - person Jeffrey; 24.12.2011
comment
+1 за предложение использовать setDefaultButton(...). -1 за предложение переопределить setVisible(). Это не требуется. Рамка не должна быть видимой при установке свойства кнопки по умолчанию корневой панели. - person camickr; 25.12.2011
comment
Я думаю, ты меня неправильно понял. Я НЕ хочу использовать JButton, когда нажимаю клавишу Enter. Я хочу передать ключ ENTER в консоль Java, когда я нажимаю JButton. Что я должен написать в прослушивателе событий onClick JButton? - person patanni; 25.12.2011

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

(что-то вроде кнопки) ActionPerformed (java.awt.event.ActionEvent evt)

person LynAs    schedule 24.12.2011
comment
Я хочу передать ENTER KEY на консоль Java, когда я нажимаю JButton. Что я должен написать в прослушивателе onClick JButton? - person patanni; 25.12.2011

Привязки клавиш в Swing обрабатываются с помощью InputMaps и ActionMaps.

У Sun есть хороший руководство по API привязки ключей. В учебнике есть следующее:

Альтернативой привязкам клавиш является использование прослушивателей ключей. Ключевые прослушиватели имеют свое место в качестве низкоуровневого интерфейса для ввода с клавиатуры, но для ответа на отдельные клавиши более подходят привязки клавиш и, как правило, приводят к более легкому сопровождению кода. Ключевые прослушиватели также сложны, если привязка клавиш должна быть активной, когда компонент не имеет фокуса. Некоторые из преимуществ привязок клавиш заключаются в том, что они в некоторой степени самодокументируются, учитывают иерархию сдерживания, поддерживают повторно используемые фрагменты кода (объекты действий) и позволяют легко удалять, настраивать или совместно использовать действия. Кроме того, они упрощают изменение клавиши, к которой привязано действие. Еще одним преимуществом действий является то, что они имеют состояние «включено», что обеспечивает простой способ отключения действия без необходимости отслеживать, к какому компоненту оно подключено.

java.awt.event.KeyListener (KeyListener Учебник).

person Jeffrey    schedule 24.12.2011
comment
Я видел этот учебник, сделал эту программу и запустил ее. Когда я нажимаю клавишу ENTER, он дает код клавиши 10. Теперь я написал эти строки в моем прослушивателе OnClick JButton System.out.println(KeyEvent.VK_ENTER); // Эта строка выводит 10 в окно консоли System.out.println((char)10); // Эта строка добавляет новую строку в java-консоль, но по-прежнему не действует как клавиша ввода. Система.out.println(\r\n); // Эта строка добавляет новую строку в java-консоль, но по-прежнему не действует как клавиша ввода. - person patanni; 25.12.2011
comment
@patanni Консоль Java состоит из трех компонентов. System.in, System.out и System.err. Нажатие клавиши ввода добавляет \r\n к читаемому потоку System.in. Добавление \r\n к System.out не сделает его доступным для System.in. (Я предполагаю, что это то, что вы пытаетесь сделать.) Если вы хотите написать \r\n, вам нужно создать пару PipedInputStream и PipedOutputStream и использовать System.setIn(yourPipedInputStream). - person Jeffrey; 26.12.2011