вот написал тестовый пример для работы с клавиатурой
моя проблема заключается в том что когда фокус устанавливается в TextArea кнопки UP и DOWN (стрелочки) перестают работать
а мне нужно чтобы кнопки работали во всех случаях где бы фокус не стоял у приложения !
как сделать подскажите !?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
public class Test extends JFrame {
JPanel jPanel1 = new JPanel();
JButton jButton5 = new JButton("UP");
JButton jButton6 = new JButton("Down");
JTextArea t1 = new JTextArea(5, 25);
public Test() {
t1.setFocusable(true);
t1.setEditable(false);
JComponent c = (JComponent) getContentPane();
InputMap inputMap = c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);
jPanel1.add(t1);
jPanel1.add(jButton5);
jPanel1.add(jButton6);
c.add(jPanel1, BorderLayout.CENTER);
c.setFocusable(true);
}
public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
}
private class MyAbstractAction extends AbstractAction {
private JButton jb;
public MyAbstractAction(JButton jb) {
this.jb = jb;
}
public void actionPerformed(ActionEvent e) {
jb.doClick();
}
}
public static void main(String args[]) {
Test frame = new Test();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(200, 200, 300, 200);
frame.show();
}
}
Здравствуйте, <Аноним>, Вы писали:
А>вот написал тестовый пример для работы с клавиатурой А>моя проблема заключается в том что когда фокус устанавливается в TextArea кнопки UP и DOWN (стрелочки) перестают работать А>а мне нужно чтобы кнопки работали во всех случаях где бы фокус не стоял у приложения ! А>как сделать подскажите !?
А>
А>import javax.swing.*;
А>import java.awt.*;
А>import java.awt.event.ActionEvent;
А>import java.awt.event.KeyEvent;
А>public class Test extends JFrame {
А> JPanel jPanel1 = new JPanel();
А> JButton jButton5 = new JButton("UP");
А> JButton jButton6 = new JButton("Down");
А> JTextArea t1 = new JTextArea(5, 25);
А> public Test() {
А> t1.setFocusable(true);
А> t1.setEditable(false);
А> JComponent c = (JComponent) getContentPane();
А> InputMap inputMap = c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
А> keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
А> keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);
А> jPanel1.add(t1);
А> jPanel1.add(jButton5);
А> jPanel1.add(jButton6);
А> c.add(jPanel1, BorderLayout.CENTER);
А> c.setFocusable(true);
А> }
А> public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
А> inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
А> c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
А> }
А> private class MyAbstractAction extends AbstractAction {
А> private JButton jb;
А> public MyAbstractAction(JButton jb) {
А> this.jb = jb;
А> }
А> public void actionPerformed(ActionEvent e) {
А> jb.doClick();
А> }
А> }
А> public static void main(String args[]) {
А> Test frame = new Test();
А> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
А> frame.setBounds(200, 200, 300, 200);
А> frame.show();
А> }
А>}
А>
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
А>>вот написал тестовый пример для работы с клавиатурой А>>моя проблема заключается в том что когда фокус устанавливается в TextArea кнопки UP и DOWN (стрелочки) перестают работать А>>а мне нужно чтобы кнопки работали во всех случаях где бы фокус не стоял у приложения ! А>>как сделать подскажите !?
А>>
А>>import javax.swing.*;
А>>import java.awt.*;
А>>import java.awt.event.ActionEvent;
А>>import java.awt.event.KeyEvent;
А>>public class Test extends JFrame {
А>> JPanel jPanel1 = new JPanel();
А>> JButton jButton5 = new JButton("UP");
А>> JButton jButton6 = new JButton("Down");
А>> JTextArea t1 = new JTextArea(5, 25);
А>> public Test() {
А>> t1.setFocusable(true);
А>> t1.setEditable(false);
А>> JComponent c = (JComponent) getContentPane();
А>> InputMap inputMap = c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
А>> keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
А>> keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);
А>> jPanel1.add(t1);
А>> jPanel1.add(jButton5);
А>> jPanel1.add(jButton6);
А>> c.add(jPanel1, BorderLayout.CENTER);
А>> c.setFocusable(true);
А>> }
А>> public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
А>> inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
А>> c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
А>> }
А>> private class MyAbstractAction extends AbstractAction {
А>> private JButton jb;
А>> public MyAbstractAction(JButton jb) {
А>> this.jb = jb;
А>> }
А>> public void actionPerformed(ActionEvent e) {
А>> jb.doClick();
А>> }
А>> }
А>> public static void main(String args[]) {
А>> Test frame = new Test();
А>> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
А>> frame.setBounds(200, 200, 300, 200);
А>> frame.show();
А>> }
А>>}
А>>
А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?
Здравствуйте, <Аноним>, Вы писали:
А>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?
я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки.
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
А>>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?
L>я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки. L>
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Lucker, Вы писали:
L>>Здравствуйте, <Аноним>, Вы писали:
А>>>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?
L>>я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки. L>>
просто UIManager при первой прорисове установит дефултные значения в InputMap (а это роизойдет после вызова конструктора).
А если мы сами установим значение в InputMap — UIManager его не заменит. Вот.
L>просто UIManager при первой прорисове установит дефултные значения в InputMap (а это роизойдет после вызова конструктора). L>А если мы сами установим значение в InputMap — UIManager его не заменит. Вот.
Спасибо огромное который раз спасаете меня !!!
Re[8]: Работа с клавиатурой в java
От:
Аноним
Дата:
15.03.04 09:09
Оценка:
Интересно но при вводе '(' нажимается кнопка Down
не знаю почему
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
public class Test extends JFrame {
JPanel jPanel1 = new JPanel();
JButton jButton5 = new JButton("UP");
JButton jButton6 = new JButton("Down");
JTextArea t1 = new JTextArea(5, 25);
JScrollPane sp = new JScrollPane(t1);
public Test() {
t1.setFocusable(true);
t1.setEditable(false);
JComponent c = (JComponent) getContentPane();
InputMap inputMap = c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
keyRegistry(c, inputMap, '(');
keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);
jPanel1.add(sp);
jPanel1.add(jButton5);
jPanel1.add(jButton6);
c.add(jPanel1, BorderLayout.CENTER);
c.setFocusable(true);
}
public void keyRegistry(JComponent c1, InputMap inputMap1, char ch) {
inputMap1.put(KeyStroke.getKeyStroke(ch), "alph" + (int) ch);
c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction1(ch));
}
public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
}
private class MyAbstractAction extends AbstractAction {
private JButton jb;
public MyAbstractAction(JButton jb) {
this.jb = jb;
}
public void actionPerformed(ActionEvent e) {
jb.doClick();
}
}
private class MyAbstractAction1 extends AbstractAction {
private char ch = ' ';
public MyAbstractAction1(char ch) {
this.ch = ch;
}
public void actionPerformed(ActionEvent e) {
t1.append("" + (char) ch);
}
}
public static void main(String args[]) {
Test frame = new Test();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(200, 200, 300, 200);
frame.show();
}
}
public class PrintCode {
public static void main(String[] args) {
System.out.println('(' + ","
+ Integer.toHexString((int)'(') + ","
+ Integer.toHexString(KeyEvent.VK_DOWN) );
}
}
Re[10]: Работа с клавиатурой в java
От:
Аноним
Дата:
15.03.04 10:04
Оценка:
Здравствуйте, ElectricalStorm, Вы писали:
ES>Здравствуйте, Аноним, Вы писали:
А>>Интересно но при вводе '(' нажимается кнопка Down А>>не знаю почему
А>>
А>а как решить эту проблему ??
первых не путать понятие нажатая клавиша (VK code) и нажатая буква (целочисленный код символа в заданной кодировке). Это два множества (различных) и определения действий для них не должны пересекаться.
public void keyRegistry(JComponent c1, InputMap inputMap1, char ch) {
inputMap1.put(KeyStroke.getKeyStroke(ch), "alph_c" + (int) ch);
c1.getActionMap().put("alph_c" + (int) ch, new MyAbstractAction1(ch));
}
public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
}
Здравствуйте, Lucker, Вы писали:
А>>а как решить эту проблему ?? L> первых не путать понятие нажатая клавиша (VK code) и нажатая буква (целочисленный код символа в заданной кодировке). Это два множества (различных) и определения действий для них не должны пересекаться.
L>