Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53

Не работает слушатель клавиатуры на java gui

14.03.2016, 11:07. Показов 2067. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,почему не работает этот код с GUI.Хочу повесить на кнопку jButton1 слушатель addKeyListener(),чтобы по нажатию
по <Enter> вычислялась сумма полей(int числа).При нажатию не происходит ничего.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import javax.swing.JOptionPane;
 
 
public class NewJFrame extends javax.swing.JFrame {
 
    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        initComponents();
    }
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
 
        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jTextField1.setText(" ");
 
        jLabel1.setText("+");
 
        jTextField2.setText(" ");
 
        jButton1.setText("jButton1");
        /*jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });*/
    jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt){
formKeyPressed(evt);
               
            }
});
 
 
        jLabel2.setText(" ");
 
    }// </editor-fold>//GEN-END:initComponents
 
 
 
    private void jButton1ActionPerformed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
int i=0;int j=0;
        try{
    
    
     i=Integer.parseInt(jTextField1.getText());
     j=Integer.parseInt(jTextField2.getText());
Integer d=i+j;
    jLabel2.setText(d.toString());        
   
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"Введите целое число.");
}//   
}//GEN-LAST:event_jButton1ActionPerformed
}
private void  formKeyPressed(java.awt.event.KeyEvent evt){
 switch(evt.getKeyCode()){
case java.awt.event.KeyEvent.VK_ENTER:
jButton1ActionPerformed(evt);
break;
default:
 
}    
 }            
 
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration//GEN-END:variables
}
Здесь часть часть кода вырезана,где идет расположение компонентов т.к форму делал в NetBeans.addKeyListener() на jButton1 добавлял в far редакторе.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2016, 11:07
Ответы с готовыми решениями:

Объясните как работает слушатель.
Ситуация такова. Имеется Фрейм. На нём кнопка conntect её обрабатывает следующий слушатель private class ConnectAction implements...

EHandler. Не работает слушатель в конце кода
public class Interface extends JFrame{ private JFrame frame; public Button...

GUI, ввод значений с клавиатуры
Здравствуйте! Вот маленькая программа. В ней есть 1 кнопка и 1 строка(label). Программка считает а+b=c. Ответ выводит в строке. Всё...

8
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
14.03.2016, 12:24
Вы хотите, чтобы именно когда jButton1 имеет фокус при нажатии именно Enter выполнялось jButton1ActionPerformed?

Разместите Ваш
Java
1
2
3
4
5
6
        jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });
в конструкторе после initComponents();
Заработает.
Но мне кажется, что Вам нужно не совсем это, а нужно Вам отловить Enter при вводе в JTextField... Нет?
0
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
14.03.2016, 15:04  [ТС]
Спасибо за совет!Я хочу,чтобы после ввода в оба поля jTextField целых чисел и чтобы была нарисована кнопка jButton,и
так после ввода чисел,не мышкой кликать по кнопке,а нажимать <Enter> и чтобы результат выводился из пользовательской функции jButton1ActionPerformed в jLabel2.Разместил jButton1.addKeyListener() в конструкторе после initComponents() ,но также.
0
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
14.03.2016, 15:19
Самое простое - это нажимать на кнопке не Enter, а пробел. То есть, вводим число 1, Tab, вводим число 2, Tab, Space. Кнопка нажмется.
А по-нормальному нужно ловить Enter на втором jTextField. На мой взгляд так пользователю удобнее.
А вариант
Java
1
2
3
4
5
6
7
8
9
    public NewJFrame() {
        initComponents();
        jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });            
    }
разве не работает?
1
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
14.03.2016, 16:26  [ТС]
А,заработало!Теперь после ввода чисел,получение фокуса для jButton и после нажатия <Enter> начал выставлять Exception в функции jButton1ActionPerformed,где то с parseInt() ошибки,но уже доходит до этой функции)

Добавлено через 28 секунд
Что то теперь не могу понять почему выставляет NumberFormatException,хотя ввожу целые числа?Функция parseInt() выдает такой exception?
0
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
14.03.2016, 16:38
Хм... Никак не могу добиться NumberFormatException при вводе целых чисел... Покажите еще раз код, что ли...
0
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
14.03.2016, 17:46  [ТС]
Вот код полностью...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import javax.swing.JOptionPane;
 
 
public class NewJFrame extends javax.swing.JFrame {
 
    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        initComponents();
    jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt){
    formKeyPressed(evt);
               
            }
});
 
    }
 
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
 
        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jTextField1.setText(" ");
 
        jLabel1.setText("+");
 
        jTextField2.setText(" ");
 
        jButton1.setText("jButton1");
        /*jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });*/
    
 
 
        jLabel2.setText(" ");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jButton1)
                    .addComponent(jLabel2))
                .addContainerGap(162, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jButton1)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addContainerGap(196, Short.MAX_VALUE))
        );
 
        pack();
    }// </editor-fold>//GEN-END:initComponents
 
 
 
    private void jButton1ActionPerformed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
Integer i=0, j=0;
        try{
    
    
     i=Integer.parseInt(jTextField1.getText());
     j=Integer.parseInt(jTextField2.getText());
Integer d=i+j;
    jLabel2.setText(d.toString());        
   
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"Введите целое число!");
}//     }//GEN-LAST:event_jButton1ActionPerformed
}
private void  formKeyPressed(java.awt.event.KeyEvent evt){
 switch(evt.getKeyCode()){
case java.awt.event.KeyEvent.VK_ENTER:
jButton1ActionPerformed(evt);
//System.out.println("ku-ku!");
break;
default:
 
}    
 }            
 
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url]http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
 
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
 
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration//GEN-END:variables
}
0
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
14.03.2016, 18:07
Лучший ответ Сообщение было отмечено Konst2016 как решение

Решение

Ага! Все из-за пробелов!
Либо не пишите пробелы, либо используйте трим - i=Integer.parseInt(jTextField1.getText() .trim()); и т.д.
Ну и в самом начале - jTextField1.setText(""); и jTextField2.setText(""); без пробелов.
1
7 / 7 / 9
Регистрация: 07.02.2016
Сообщений: 207
Записей в блоге: 53
14.03.2016, 18:48  [ТС]
Спасибо большое!Все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2016, 18:48
Помогаю со студенческими работами здесь

Java GUI
всем привет! Как сделать так , чтобы когда я нажимала на кнопку след вопрос, то появлялся новый вопрос и значения в if и else обнулялись и...

Java GUI
Здравствуйте! Начну с того что немножко клепал windows формы на C#, хочу поинтересоваться как обстоит дело с GUI в Java. 1) Какой...

GUI в Java
Какая технология используется наиболее часто или с какой лучше всего начать?

Java GUI
Немного почитал об графическом отображении в Java. Насколько я понял каждый компонент задается координатами и размерами,эти параметры...

Java GUI и OpenGL
Здравствуйте! Подскажите, пожалуйста! Мне нужно создать программу с использованием OpenGL (для рисования цилиндрических объектов в разном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru