2015-12-25 4 views
0

Я работаю над проектом с Java и ImageJ. У меня есть небольшая проблема, требующая правильной работы:Нажатие JButton вместо клавиатуры

У меня есть JButton t. Когда я нажимаю на t, он должен быть таким же, как если бы я просто нажал «T» на клавиатуре. Причина (для тех, кто знаком с ImageJ), когда вы перетаскиваете ROI в ImageJ и нажимаете кнопку «T» на клавиатуре, он открывает диспетчер областей и добавляет только недавно перенесенный ROI в Менеджер. Итак, вместо того, чтобы кодировать его до точки, где он добавляет ROI в диспетчер региона, когда я нажимаю на t (это слишком сложно для меня), кнопка t должна каким-то образом выполнять событие клавиатуры, которое нажимает «T» для меня, когда я нажимаю на кнопку JButton.

+2

Подсчитайте меня среди тех, кто до сих пор путают, и поэтому, если вам не получите достойного ответа в ближайшее время, подумайте о том, чтобы немного уточнить свой вопрос и показать код. Пожалуйста, посмотрите на [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) за хорошие предложения. Кроме того, вы, вероятно, захотите избавиться от строки '' Пожалуйста, не делайте слишком сложным кодирование ... "'. 1) Этот сайт предназначен для ответа на вопросы, не получая код, и 2) этот сайт укомплектован добровольцами, поэтому вы не захотите вводить ограничения на любые ответы, которые вы можете получить. Если что-то смущает вас в ответах или комментариях, просто спросите. –

+0

* «Пожалуйста, не делайте свое кодирование слишком сложным». * Пожалуйста, задайте вопрос. Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

0

Не знаю, что такое ImageJ, но так как вы используете JButton Я бы предположил, что он основан на Swing. В Swing вы использовали бы для этого Key Bindings. То есть вы создаете Action, который можно использовать, когда вы нажимаете кнопку или используете клавиатуру.

Начните с действий:

Action tAction = new AbstractAction() 
{ 
    @Override 
    public void actionPerford(ActionEvent e) 
    { 
     // do something 
    } 
} 

Используйте JButton:

JButton button = new JButton(tAction); 
button.setText("some action"); 

Использование привязок ключей:

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("T"), "tAction"); 
button.getActionMap().put("tAction", tAction); 
+0

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

+0

@MaxRoth, 'как ключи будут знать, что они должны выполнить код,' - потому что вы использовали InputMap/ActionMap для привязки KeyStroke к Action. В приведенном выше примере 'tAction' привязан к' T KeyStroke'. – camickr

+0

'когда я нажимаю кнопку, так как я нажимал кнопку« T »на моей клавиатуре». - Зайдите http://stackoverflow.com/questions/23375276/attaching-a-single-action-listener-to -все-кнопки/23375436 # 23375436 для полного примера. – camickr

Смежные вопросы