Случайный цвет панели в Слушателе для кнопки работает только один раз - PullRequest
0 голосов
/ 19 мая 2019

My Listener выполняет метод changeColor() только один раз.

Пробовал разные версии создателей случайных цветов

Код:

// Java program to create a blank text
// field of definite number of columns.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Main extends JFrame implements ActionListener {
    // JTextField
    static JTextField textField;

    // JFrame
    static JFrame frame;

    // JButton
    static JButton button;

    // label to display text
    static JLabel label;

    static JPanel panel;

    // main class
    public static void main(String[] args)
    {
        // create a new frame to stor text field and button
        frame = new JFrame("textfield");

        // create a label to display text
        label = new JLabel("nothing entered");

        // create a new button
        button = new JButton("submit");

        // create a panel
        panel = new JPanel();

        // create an object of the text class
        Main te = new Main();

        // addActionListener to button
        button.addActionListener(te);

        // create an object of JTextField with 16 columns
        textField = new JTextField(16);

        // add buttons and textfield to label and then to panel
        panel.add(textField);
        panel.add(button);
        panel.add(label);

        label.setOpaque(true);

        // add panel to frame
        frame.add(panel);

        // set the size of frame
        frame.setSize(300, 300);

        panel.setBackground(Color.cyan);

        frame.show();
    }

    // if the button is pressed
    @Override
    public void actionPerformed(java.awt.event.ActionEvent e)
    {
        String s = e.getActionCommand();
        if (s.equals("submit")) {

            // set the text of the label to the text of the field
            if(textField.getText().equals("hue")) {
                panel.setBackground(changeColor());
            }

            label.setText(textField.getText());

            // set the text of field to blank
            textField.setText(" ");
        }
    }
    public Color changeColor() {
        Color randomColor = new Color((int)(Math.random() * 0x1000000));
        return randomColor;
    }
}

Я хочу, чтобы программа снова и снова создала новый цвет при вводе "hue" в textField для отправки с помощью кнопки. К сожалению, это работает только один раз.

1 Ответ

1 голос
/ 20 мая 2019

На линии 78 Ваш звонок:

textField.setText(" ");

Полагаю, вы хотите позвонить:

textField.setText("");

Чтобы действительно сделать ваше текстовое поле пустым. "" не совпадает с ""

После первого нажатия кнопки текстовое поле содержит «». Если после этого вы набираете оттенок, содержимое текстового поля будет «hue», а не «hue».

Следовательно, ваш оператор if не true в textField.getText().equals("hue") и ваш метод не вызывается.

...