0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
1

Неконтролируемое нажатие кнопки в Java

12.07.2014, 17:20. Показов 1201. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,уважаемые форумчане. У меня возникла проблема. Она состоит в том,что мне надо написать программму,которая создаст две кнопки: "+" и "-". При нажатии первой выведется 1,при повторном 2,итд.А при нажатии "-" выведется число на 1 меньше текущего.Проблема состоит в том,что при первом же нажатии кнопки происходит ее неконтролируемое нажатие и выводится ошибка о выход за пределы массива.
Вот сам код:
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
public class Draw extends JPanel implements ActionListener{
    public static int[] a={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};
    public static int[] b={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};
     static String[] s1=new String[30];
     static String[] s2=new String[30];
     JButton button1=new JButton("+");
     JButton button2=new JButton("-");
     int p,m;
     
     public void paintComponent(Graphics g) {
         
         button1.addActionListener(this);
         button2.addActionListener(this);
         
         add(button1);
         add(button2);
        button1.setVisible(true);
        button2.setVisible(true);
        
         
         for(int i=0;i<a.length;i++) {
                s1[i]=Integer.toString(a[i]);
            }
         for(int i=0;i<a.length;i++) {
                s2[i]=Integer.toString(b[i]);
            }
         p=0;
         m=0;
     }
     
    
     public void actionPerformed(ActionEvent event) {
         Object source=event.getSource();
         Graphics z=getGraphics();
         
         if(source==button1) {
            z.drawString(s1[p],255,366);
            p++;
         }
        
         if(source==button2) {
             z.setColor(Color.white);
                z.fillRect(500, 320, 70, 70);
                z.setColor(Color.BLACK);
                z.drawRect(500, 320, 70, 70);
                z.setColor(Color.blue);
                p--;
                z.drawString(s2[p], 510, 370);
                
         }
     }
     
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2014, 17:20
Ответы с готовыми решениями:

Неконтролируемое нажатие кнопки в Java
Добрый день,уважаемые форумчане. У меня возникла проблема. Она состоит в том,что мне надо написать...

При нажатие кнопки +1 java
Здравствуйте помогите с программой, надо что бы при нажатии кнопки Del или при нажатии Backspace в...

Эмулировать нажатие кнопки мыши или нажатие клавиши на Web - странице
Здравствуйте. Как на эмулировать переходы по страницам на сайте, открытом в Интернет эксплорере!....

Нажатие каждой кнопки приводит к ее сокрытию и показу ранее скрытой кнопки
Нажатие каждой кнопки приводит к ее сокрытию и показу ранее скрытой кнопки. При этом номер...

12
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 00:09 2
Proskur13,
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Draw extends JPanel implements ActionListener {
    private int[] a = {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};
    private int[] b = {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};
    private String[] s1 = new String[30];
    private String[] s2 = new String[30];
    private JButton button1;
    private JButton button2;
    private int p, m;
 
    public Draw() {
        button1 = new JButton("+");
        button2 = new JButton("-");
        button1.addActionListener(this);
        button2.addActionListener(this);
        add(button1);
        add(button2);
        p = 0;
        m = 0; //зачем, если не используется?
        for (int i = 0; i < a.length; i++) {
            s1[i] = Integer.toString(a[i]);
        }
        for (int i = 0; i < a.length; i++) {
            s2[i] = Integer.toString(b[i]);
        }
    }
 
    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        Graphics z = getGraphics();
 
        if (source == button1) {
            z.drawString(s1[p++], 255, 366);
        }
 
        if (source == button2) {
            z.setColor(Color.white);
            z.fillRect(500, 320, 70, 70);
            z.setColor(Color.BLACK);
            z.drawRect(500, 320, 70, 70);
            z.setColor(Color.blue);
            z.drawString(s1[p--], 510, 370);
        }
    }
}
я не смог понять что вы хотели добиться, но возможно такой вариант вам подойдет... Но, я считаю, что вы рановато полезли в swing. Вам бы для начала разобраться с базовыми вещами (конструкторы, статические и обычные методы/поля, приведения типов, работа с массивами)... а уж потом только за рисование форточек приниматься...
0
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
13.07.2014, 11:53  [ТС] 3
К сожалению,кнопка продолжает нажиматься и происходит выход за границу массива.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 12:37 4
Proskur13, естественно, я лишь убрал грубые ошибки, а добавить проверку, полагаю, вы сможете самостоятельно.
0
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
13.07.2014, 16:32  [ТС] 5
Я не могу понять,какая проверка не даст кнопке нажиматься многократно?
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 19:51 6
Вариант попроще:
добавить проверку если p == 0 то прекращать p++ делать
Вариант посложнее.
если p == 0 то button.setEnable(false)
0
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
13.07.2014, 20:01  [ТС] 7
Так проблема состоит в том,что при первом же нажатии начинается многократное нажатие,после моего 1 клика происходит 31.Я не могу понять,каким образом эта проверка исправит это.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 20:41 8
Proskur13, Вопрос на засыпку... вы пробовали использовать тот код что я написал чуть выше?
0
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
13.07.2014, 20:47  [ТС] 9
Код был использован,все работает,вот только одно но: после нажатия на "+" появляется 1,но если после этого нажать "-",то появится 2.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 21:14 10
Proskur13, а что должно появиться? и где?
0
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
13.07.2014, 22:18  [ТС] 11
Смотрите: я нажимаю на +,появляется 1,еще раз-появляется 2. Потом я нажимаю на "-" и появляется 3! Потом я еще раз жму на "-" и появляется 2 и только при третьем нажатии выводится 1,хотя должно быть так,чтобы после одного нажатия "-" выводилась 1.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
13.07.2014, 23:29 12
Лучший ответ Сообщение было отмечено Proskur13 как решение

Решение

Proskur13,
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Draw extends JPanel implements ActionListener {
    private final int MAXVALUE = 30;
    private final int MINVALUE = 0;
    private JButton button1;
    private JButton button2;
    private JLabel label;
    private int p, m;
 
    public Draw() {
        p = 0;
        button1 = new JButton("+");
        button2 = new JButton("-");
        button1.addActionListener(this);
        button2.addActionListener(this);
 
        label = new JLabel();
        add(button1);
        add(button2);
        add(label);
    }
 
    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
 
        if (source == button1) {
            if (p < MAXVALUE) {
                p++;
                label.setText(Integer.toString(p));
            }
        }
 
        if (source == button2) {
            if (p > MINVALUE) {
                p--;
                label.setText(Integer.toString(p));
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 12.07.2014
Сообщений: 16
14.07.2014, 22:39  [ТС] 13
Спасибо большое за помощь.
0
14.07.2014, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2014, 22:39
Помогаю со студенческими работами здесь

Нажатие кнопки приводит к изменению цвета формы и заголовка кнопки
Помогите пожалуйста так сделать : &quot;Нажатие кнопки приводит к изменению цвета формы на синий, а...

Определить нажатие кнопки Home и кнопки сворачивания приложения
По аналогии с backPressed: @Override public void onBackPressed() { }

Привязать выполнение действия кнопки на нажатие кнопки Enter
У меня кнопка - Button, выполняет такое то действие, не подскажите, как привязать выполнение...

Нужно написать программу которая будет все скрывать при нажатие кнопки и при втором нажатие открывать
Вообщем на форме 1, у нас 3 label(label1,label2,label3) и 2 button(button1,button2), нужно написать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru