Счетчик приращения JAVA, когда при нажатии JButton появляется определенный цвет - PullRequest
0 голосов
/ 13 октября 2018

Я создаю программу, в которой пользователь нажимает кнопку JButton, цвет фона которой по умолчанию СИНИЙ.Каждый раз, когда пользователь нажимает кнопку JButton, фон случайным образом циклически перебирает массив цветов.Каждый раз, когда фон становится КРАСНЫМ, JLabel печатает инкрементный счетчик.Я могу заставить JButton циклически переключаться между массивами цветов.Когда появляется первый КРАСНЫЙ, счетчик увеличивается на 1. Но каждый раз, когда появляется КРАСНЫЙ, счетчик не увеличивается.Я не могу заставить счетчик продолжать увеличиваться после начального счета.Вот код для кнопки:

        //label for counter
        JLabel lblRedCounter = new JLabel("Red Counter: 00");
        lblRedCounter.setBorder(new EmptyBorder(31, 3, 31, 3));
        lblRedCounter.setFont(new Font("Tahoma", Font.PLAIN, 30));
        lblRedCounter.setOpaque(true);
        lblRedCounter.setBackground(Color.LIGHT_GRAY);
        panel.add(lblRedCounter);

        //button to change background and initiate counter
        JButton btnClickMe = new JButton("Click Me");
        btnClickMe.setFocusable(false);
        btnClickMe.setBorder(new EmptyBorder(33, 47, 33, 47));
        btnClickMe.setFont(new Font("Tahoma", Font.PLAIN, 30));
        btnClickMe.setBackground(Color.BLUE);
        btnClickMe.setForeground(Color.WHITE);
        btnClickMe.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) 
            {               
                //create arraylist of colors
                colors = new ArrayList<>();
                colors.add(Color.BLUE);
                colors.add(Color.RED);
                colors.add(Color.GREEN);
                colors.add(Color.ORANGE);
                colors.add(Color.MAGENTA);

                //creates random object
                Random rand = new Random();
                //random object cycles through 5 places to match array length
                int num = rand.nextInt(5);

                //cycles randomly through array of colors
                btnClickMe.setBackground(colors.get(num));

                //default for counter to be used when RED is background
                int counter = 0;
                /**
                 * This only seems to cycle once
                 * Checks if background is RED, increments counter
                 * Changes output of JLabel lblRedCounter
                 */
                if (btnClickMe.getBackground() == Color.RED)
                {
                    counter++;
                    lblRedCounter.setText("Red Counter: " + counter);
                }
            }
        });
        panel.add(btnClickMe);

1 Ответ

0 голосов
/ 13 октября 2018

Вам необходимо переместить переменную int за пределы метода actionPerfomed и сделать ее переменной экземпляра (или статической, хотя обычно это не рекомендуется).Прямо сейчас вы инициализируете новую переменную с 0 каждый раз, когда вызывается actionPerformed.

...