В коде я генерирую случайный цвет при нажатии кнопки, но каждый раз, когда цвет становится красным, текст меток должен изменяться с новым увеличенным значением переменной 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;
}
}