Работа с клавиатурой в java
От: Аноним  
Дата: 12.03.04 17:46
Оценка:
вот написал тестовый пример для работы с клавиатурой
моя проблема заключается в том что когда фокус устанавливается в 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();
   }
}
Re: Работа с клавиатурой в java
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 12.03.04 18:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>вот написал тестовый пример для работы с клавиатурой

А>моя проблема заключается в том что когда фокус устанавливается в 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();
А>   }
А>}

А>


лови

import javax.swing.*;
import javax.swing.text.EditorKit;
import javax.swing.text.DefaultEditorKit;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

...

        Action upButton = keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
        Action downButton = keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);

        EditorKit editorKit = t1.getUI().getEditorKit(t1);
        if (editorKit instanceof DefaultEditorKit) {
            Action upAtcion = t1.getActionMap().get(DefaultEditorKit.upAction);
            Action downAtion = t1.getActionMap().get(DefaultEditorKit.downAction);

            t1.getActionMap().put(DefaultEditorKit.upAction, new CompoudAction(upAtcion, upButton));
            t1.getActionMap().put(DefaultEditorKit.downAction, new CompoudAction(downAtion, downButton));
        }
...
    public Action keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
        final Action action = new MyAbstractAction(jb);
        inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
        c1.getActionMap().put("alph" + (int) ch, action);
        return action;
    }

...

    private class CompoudAction extends AbstractAction {
        private final Action first, second;

        public CompoudAction(Action firs, Action second) {
            this.first = firs;
            this.second = second;
        }

        public void actionPerformed(ActionEvent e) {
            first.actionPerformed(e);
            second.actionPerformed(e);
        }
    }

}
... << RSDN@Home 1.1.3 stable >>
Re[2]: Работа с клавиатурой в java
От: Аноним  
Дата: 12.03.04 18:19
Оценка:
Здравствуйте, 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();
А>>   }
А>>}

А>>


L>лови


L>
L>import javax.swing.*;
L>import javax.swing.text.EditorKit;
L>import javax.swing.text.DefaultEditorKit;
L>import java.awt.*;
L>import java.awt.event.ActionEvent;
L>import java.awt.event.KeyEvent;

L>...

L>        Action upButton = keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
L>        Action downButton = keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);

L>        EditorKit editorKit = t1.getUI().getEditorKit(t1);
L>        if (editorKit instanceof DefaultEditorKit) {
L>            Action upAtcion = t1.getActionMap().get(DefaultEditorKit.upAction);
L>            Action downAtion = t1.getActionMap().get(DefaultEditorKit.downAction);

L>            t1.getActionMap().put(DefaultEditorKit.upAction, new CompoudAction(upAtcion, upButton));
L>            t1.getActionMap().put(DefaultEditorKit.downAction, new CompoudAction(downAtion, downButton));
L>        }
L>...
L>    public Action keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
L>        final Action action = new MyAbstractAction(jb);
L>        inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
L>        c1.getActionMap().put("alph" + (int) ch, action);
L>        return action;
L>    }

L>...

L>    private class CompoudAction extends AbstractAction {
L>        private final Action first, second;

L>        public CompoudAction(Action firs, Action second) {
L>            this.first = firs;
L>            this.second = second;
L>        }

L>        public void actionPerformed(ActionEvent e) {
L>            first.actionPerformed(e);
L>            second.actionPerformed(e);
L>        }
L>    }

L>}

L>




К сожалению не работает (
Re[3]: Работа с клавиатурой в java
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 12.03.04 18:25
Оценка:

import javax.swing.*;
import javax.swing.text.EditorKit;
import javax.swing.text.DefaultEditorKit;
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_ANCESTOR_OF_FOCUSED_COMPONENT);

        Action upButton = keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
        Action downButton = keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);

        EditorKit editorKit = t1.getUI().getEditorKit(t1);
        if (editorKit instanceof DefaultEditorKit) {
            Action upAtcion = t1.getActionMap().get(DefaultEditorKit.upAction);
            Action downAtion = t1.getActionMap().get(DefaultEditorKit.downAction);

            t1.getActionMap().put(DefaultEditorKit.upAction, new CompoudAction(upAtcion, upButton));
            t1.getActionMap().put(DefaultEditorKit.downAction, new CompoudAction(downAtion, downButton));
        }

        jPanel1.add(t1);
        jPanel1.add(jButton5);
        jPanel1.add(jButton6);
        c.add(jPanel1, BorderLayout.CENTER);
        c.setFocusable(true);
    }

    public Action keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
        final Action action = new MyAbstractAction(jb);
        inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
        c1.getActionMap().put("alph" + (int) ch, action);
        return action;
    }

    private class MyAbstractAction extends AbstractAction {
        private JButton jb;

        public MyAbstractAction(JButton jb) {
            this.jb = jb;
        }

        public void actionPerformed(ActionEvent e) {
            jb.doClick();
        }
    }

    private class CompoudAction extends AbstractAction {
        private final Action first, second;

        public CompoudAction(Action firs, Action second) {
            this.first = firs;
            this.second = second;
        }

        public void actionPerformed(ActionEvent e) {
            first.actionPerformed(e);
            second.actionPerformed(e);
        }
    }

    public static void main(String args[]) {
        Test frame = new Test();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(200, 200, 300, 200);
        frame.show();
    }
}

у мнея работает
1.4.2_02 XP
... << RSDN@Home 1.1.3 stable >>
Re[4]: Работа с клавиатурой в java
От: Аноним  
Дата: 12.03.04 18:48
Оценка:
Здравствуйте, Lucker, Вы писали:

L>

L>import javax.swing.*;
L>import javax.swing.text.EditorKit;
L>import javax.swing.text.DefaultEditorKit;
L>import java.awt.*;
L>import java.awt.event.ActionEvent;
L>import java.awt.event.KeyEvent;

L>public class Test extends JFrame {
L>    JPanel jPanel1 = new JPanel();
L>    JButton jButton5 = new JButton("UP");
L>    JButton jButton6 = new JButton("Down");
L>    JTextArea t1 = new JTextArea(5, 25);

L>    public Test() {
L>        t1.setFocusable(true);
L>        //t1.setEditable(false);

L>        JComponent c = (JComponent) getContentPane();
L>        InputMap inputMap = c.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

L>        Action upButton = keyRegistry(c, inputMap, KeyEvent.VK_UP, jButton5);
L>        Action downButton = keyRegistry(c, inputMap, KeyEvent.VK_DOWN, jButton6);

L>        EditorKit editorKit = t1.getUI().getEditorKit(t1);
L>        if (editorKit instanceof DefaultEditorKit) {
L>            Action upAtcion = t1.getActionMap().get(DefaultEditorKit.upAction);
L>            Action downAtion = t1.getActionMap().get(DefaultEditorKit.downAction);

L>            t1.getActionMap().put(DefaultEditorKit.upAction, new CompoudAction(upAtcion, upButton));
L>            t1.getActionMap().put(DefaultEditorKit.downAction, new CompoudAction(downAtion, downButton));
L>        }

L>        jPanel1.add(t1);
L>        jPanel1.add(jButton5);
L>        jPanel1.add(jButton6);
L>        c.add(jPanel1, BorderLayout.CENTER);
L>        c.setFocusable(true);
L>    }

L>    public Action keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
L>        final Action action = new MyAbstractAction(jb);
L>        inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
L>        c1.getActionMap().put("alph" + (int) ch, action);
L>        return action;
L>    }

L>    private class MyAbstractAction extends AbstractAction {
L>        private JButton jb;

L>        public MyAbstractAction(JButton jb) {
L>            this.jb = jb;
L>        }

L>        public void actionPerformed(ActionEvent e) {
L>            jb.doClick();
L>        }
L>    }

L>    private class CompoudAction extends AbstractAction {
L>        private final Action first, second;

L>        public CompoudAction(Action firs, Action second) {
L>            this.first = firs;
L>            this.second = second;
L>        }

L>        public void actionPerformed(ActionEvent e) {
L>            first.actionPerformed(e);
L>            second.actionPerformed(e);
L>        }
L>    }

L>    public static void main(String args[]) {
L>        Test frame = new Test();
L>        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
L>        frame.setBounds(200, 200, 300, 200);
L>        frame.show();
L>    }
L>}



L>

L>у мнея работает
L>1.4.2_02 XP



Большое спасибо !!! Большущие !!!
Re[4]: Работа с клавиатурой в java
От: Аноним  
Дата: 12.03.04 19:33
Оценка:
А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?
Re[5]: Работа с клавиатурой в java
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 15.03.04 08:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?


я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки.
button.getInputMap(JComponent.WHEN_FOCUSED).remove(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));
... << RSDN@Home 1.1.3 stable >>
Re[6]: Работа с клавиатурой в java
От: Аноним  
Дата: 15.03.04 08:16
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?


L>я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки.

L>
L>button.getInputMap(JComponent.WHEN_FOCUSED).remove(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));

L>



Спасибо большое !!!
я составил тестовый пример для проверки ... не работает

import javax.swing.*;
import java.awt.event.KeyEvent;

public class Test2 extends JFrame{
    JButton jb = new JButton("Test");
    JPanel jp = new JPanel();
    public Test2() {
        jb.getInputMap(JComponent.WHEN_FOCUSED).remove(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));
        jp.add(jb);
        getContentPane().add(jp);
    }
     public static void main(String args[]) {
        Test2 frame = new Test2();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(200, 200, 300, 200);
        frame.show();
    }
}
Re[7]: Работа с клавиатурой в java
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 15.03.04 08:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Lucker, Вы писали:


L>>Здравствуйте, <Аноним>, Вы писали:


А>>>А можно сделать так что бы по нажатию на пробел любая кнопка которая в фокусе не нажималась а нажималась та кнопка для которой явно определена такая акция ?


L>>я так думаю, надо просто удалить соответствующий KeyStroke с WHEN_FOCUSED InputMap кнопки.

L>>
L>>button.getInputMap(JComponent.WHEN_FOCUSED).remove(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));

L>>



А>Спасибо большое !!!

А>я составил тестовый пример для проверки ... не работает

А>
А>import javax.swing.*;
А>import java.awt.event.KeyEvent;

А>public class Test2 extends JFrame{
А>    JButton jb = new JButton("Test");
А>    JPanel jp = new JPanel();
А>    public Test2() {
А>        jb.getInputMap(JComponent.WHEN_FOCUSED).remove(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));
А>        jp.add(jb);
А>        getContentPane().add(jp);
А>    }
А>     public static void main(String args[]) {
А>        Test2 frame = new Test2();
А>        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
А>        frame.setBounds(200, 200, 300, 200);
А>        frame.show();
А>    }
А>}
А>

стормозил
 jb.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "none");

просто UIManager при первой прорисове установит дефултные значения в InputMap (а это роизойдет после вызова конструктора).
А если мы сами установим значение в InputMap — UIManager его не заменит. Вот.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Работа с клавиатурой в java
От: Аноним  
Дата: 15.03.04 08:29
Оценка:
L>
L> jb.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "none");
L>

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();
    }
}
Re[9]: Работа с клавиатурой в java
От: ElectricalStorm Россия  
Дата: 15.03.04 09:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Интересно но при вводе '(' нажимается кнопка 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();
А>    }
А>}

А>



у них коды одинаковые

import javax.swing.*;
import java.awt.event.KeyEvent;

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

А>>не знаю почему

А>>

А>>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();
А>>    }
А>>}

А>>



ES>у них коды одинаковые


ES>import javax.swing.*;

ES>import java.awt.event.KeyEvent;

ES>public class PrintCode {

ES> public static void main(String[] args) {
ES> System.out.println('(' + ","
ES> + Integer.toHexString((int)'(') + ","
ES> + Integer.toHexString(KeyEvent.VK_DOWN) );
ES> }
ES>}



а как решить эту проблему ??
Re[11]: Работа с клавиатурой в java
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 15.03.04 10:23
Оценка:
А>а как решить эту проблему ??
первых не путать понятие нажатая клавиша (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));
    }
... << RSDN@Home 1.1.3 stable >>
Re[12]: Работа с клавиатурой в java
От: ElectricalStorm Россия  
Дата: 15.03.04 10:34
Оценка:
Здравствуйте, Lucker, Вы писали:

А>>а как решить эту проблему ??

L> первых не путать понятие нажатая клавиша (VK code) и нажатая буква (целочисленный код символа в заданной кодировке). Это два множества (различных) и определения действий для них не должны пересекаться.

L>
L>     public void keyRegistry(JComponent c1, InputMap inputMap1, char ch) {
L>        inputMap1.put(KeyStroke.getKeyStroke(ch), "alph_c" + (int) ch);
L>        c1.getActionMap().put("alph_c" + (int) ch, new MyAbstractAction1(ch));
L>    }
L>    public void keyRegistry(JComponent c1, InputMap inputMap1, int ch, JButton jb) {
L>        inputMap1.put(KeyStroke.getKeyStroke(ch, 0), "alph" + ch);
L>        c1.getActionMap().put("alph" + (int) ch, new MyAbstractAction(jb));
L>    }
L>


блин я дурак !!!
спасибо еще раз !!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.