Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Почему getKeyEvent возвращает 0?


Автор: Avtarkia 8.11.2008, 21:35
Пытаюсь обработать ввод с клавиатуры в текстовую область. Запоминаются не все введённые символы, а только буквы. Проблема с обработкой кнопки backspace:
Код

private JTextField getJTextField7() {
        if (jTextField7 == null) {
            jTextField7 = new JTextField();
            newName = new String();//сюда сохраняется нужная строка
            jTextField7.setPreferredSize(new Dimension(4, 19));
            jTextField7.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e) {
                    int code = e.getKeyCode();//Achtung!
                    if(code == KeyEvent.VK_BACK_SPACE){        
                        if(newName.length() > 0){
                            String str = newName.substring(0,newName.length()-2 );
                            newName = str;
                            //newName = newName.substring(0,newName.length()-2 );
                            System.out.println(newName.toString());            
                        }
                    }
                    String tmp = Character.toString(e.getKeyChar());
                    if(isLetter(tmp)){//метод, проверяющий, является ли символ буквой
                        newName = newName + tmp;
                        System.out.println(newName.toString());                                
                    }                                
                }
            });
        }
        return jTextField7;
    }



Проблема,собственно, в том, что код кнопочки всегда получается = 0((

Автор: Старовъръ 8.11.2008, 21:45
А метод keyPressed() не пробовала?

Автор: powerOn 8.11.2008, 22:34
совсем недавно http://forum.vingrad.ru/forum/index.php?show_type=forum&showtopic=234704.

Автор: Avtarkia 9.11.2008, 10:59
Ок,спасибо smile 

Автор: Avtarkia 9.11.2008, 12:48
Теперь возникла другая проблема. Если в этой текстовой области ввести один неподходящий символ, например, циферку, то она там и остаётся несмотря на  
Код

jTextField7.setText(newName);

Вот кусок кода:
Код

private JTextField getJTextField7() {
        if (jTextField7 == null) {
            jTextField7 = new JTextField();
            newName = null;
            jTextField7.setPreferredSize(new Dimension(4, 19));
            jTextField7.addKeyListener(new KeyAdapter() {   
                public void keyPressed(java.awt.event.KeyEvent e) {    
                    int code = e.getKeyCode();
                    if(code == KeyEvent.VK_BACK_SPACE){
                        if(newName != null){
                            if(newName.length() > 1)
                                newName = newName.substring(0,newName.length()-1 );
                            else{
                                if(newName.length() == 1)
                                    newName = null;
                            }
                        }    
                    }
                    String tmp = Character.toString(e.getKeyChar());
                    if(isLetter(tmp)){
                        if(newName == null)
                            newName = tmp;
                        else
                            newName = newName + tmp;                                        
                    }
                    else{
                        jTextField7.setText(newName);
                    }
                    jTextField7.setText(newName);
                }
                
            });
        }
        return jTextField7;
    }


Может там какой-то дефолтный обработчик работает?...Можно ли в таком случае удалять его через remove.. прямо в коде?

Автор: skif18 23.11.2009, 16:43
попробуй перед 
Код

 jTextField7.setText(newName);

дать 
Код

 jTextField7.selectAll();

Код

 Component editor = jTable.getEditorComponent();
                            editor.requestFocus(); // fix!
                            
                            if (editor instanceof JTextField)
                          
                            { 
                                ((JTextField)editor).selectAll();  // а это так, бонус...
                                String str = Character.toString(e.getKeyChar());
                                System.out.println("str="+str);
                                ((JTextField)editor).setText(str);
                            }
                            }

У меня вот так работало.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)