Значение не увеличивается по условию цвета соответствует JFrame? - PullRequest
0 голосов
/ 09 июля 2020

В коде я генерирую случайный цвет при нажатии кнопки, но каждый раз, когда цвет становится красным, текст меток должен изменяться с новым увеличенным значением переменной redCount. Я получаю цвета из моего Color [], которые меняются при нажатии кнопки, но когда цвет фона кнопок красный, мне не удалось получить переменную redCount для увеличения значения. Ниже приведены некоторые сведения о назначении.

Инструкции Создайте новый проект Java и включите пакет с именем counter. Включите JFrame, который называется Counter. java, и реализуйте GUI, который соответствует следующим описаниям: Макет GUI: JFrame имеет следующие размеры: ширина: 500 и высота: 200 Он включает 'Красный счетчик метка 'и кнопка' Click Me 'примерно одинакового размера. Метка «Красный счетчик» остается, а кнопка «Нажми меня» находится непосредственно рядом с ней (без пробела). Внизу есть метка, которая показывает, чей это GUI. Кнопка «Click Me» Когда GUI открывается, фон кнопки синий, а текст белый. Шрифт больше, чем шрифт этикеток, но достаточно мелкий, чтобы оставлять отступы по бокам. Текст - «Нажми меня» по центру. Ярлык «Красный счетчик» Когда открывается GUI, счетчик отображает красный счетчик: 00. Фон светло-серый. Моноширинный шрифт и размер шрифта больше, чем по умолчанию, но достаточно мал, чтобы удобно поместиться на этикетке, не касаясь сторон. Ярлык внизу Отображается текст: {YourName} GUI, где {YourName} заменяется вашим настоящим именем (см. Образец GUI). Цвет фона - очень светлый оттенок серого. Он должен быть заметно светлее, чем фон этикетки выше. Шрифт отличается от двух других шрифтов, которые использовались ранее. Отступ сверху и снизу примерно равен высоте буквы. Событие нажатия кнопки Каждый раз при нажатии кнопки цвет фона меняется. Для кнопки существует ровно 5 возможных цветов фона: красный, синий, зеленый, оранжевый или пурпурный. Каждый раз, когда цвет фона становится красным, значение «Красного счетчика» слева увеличивается на единицу.

Jframe

package counter;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.util.Random;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.awt.event.ActionEvent;

public class Counter extends JFrame {

    // Fields
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private int redCount = 00;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Counter frame = new Counter();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Counter() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 500, 200);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = redCounterLabel();
        contentPane.add(lblNewLabel);

        JButton btnNewButton = clickMeButton();
        contentPane.add(btnNewButton);

        JLabel lblKodysLabel = nameLabel();
        contentPane.add(lblKodysLabel);
    }

    /**
     * Label that states who's GUI this is.
     * 
     * @return Returns the label with my name.
     */
    private JLabel nameLabel() {
        JLabel lblKodysLabel = new JLabel("Kodys GUI");
        lblKodysLabel.setBackground(new Color(220, 220, 220));
        lblKodysLabel.setFont(new Font("Segoe UI Light", Font.PLAIN, 22));
        lblKodysLabel.setBounds(5, 113, 472, 35);
        lblKodysLabel.setHorizontalAlignment(SwingConstants.CENTER);
        return lblKodysLabel;
    }

    /**
     * Changes the color of the button.
     * 
     * @return Returns a new colored button.
     */
    private JButton clickMeButton() {

        JButton btnNewButton = new JButton("Click Me");
        btnNewButton.setForeground(new Color(245, 245, 245));

        Color[] clr = { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.RED };
        btnNewButton.setFont(new Font("Segoe UI Light", Font.PLAIN, 22));

        btnNewButton.setBackground(Color.BLUE);
        btnNewButton.setBounds(268, 5, 209, 95);

        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object source = e.getSource();
                if (source instanceof Component) {
                    // Creating a random int.
                    Random rd = new Random();
                    int i = rd.nextInt(5);
                    ((Component) source).setBackground(clr[i]);
                }
            }
        });
        if (btnNewButton.getBackground() == clr[4]) {
            DecimalFormat formatter = new DecimalFormat("00");
            redCount = redCount+1;
            redCounterLabel().setText("Red Counter: " + String.valueOf(formatter.format(redCount)));
        }
        return btnNewButton;
    }

    /**
     * Label to count how many times red shows up as the color of the button.
     * 
     * @return Returns the new amount on the label.
     */
    private JLabel redCounterLabel() {

        DecimalFormat formatter = new DecimalFormat("00");
        JLabel lblNewLabel = new JLabel("Red Counter: " + String.valueOf(formatter.format(redCount)));

        lblNewLabel.setFont(new Font("Segoe UI Semibold", Font.PLAIN, 22));
        lblNewLabel.setBackground(new Color(211, 211, 211));
        lblNewLabel.setOpaque(true);
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setBounds(5, 5, 263, 95);
        return lblNewLabel;
    }

}
...