Подтвердить что ты не робот

Как отключить javax.swing.JButton в java?

Я создал приложение swings, и в GUI есть кнопка "Пуск" . Я хочу, чтобы всякий раз, когда я нажимал на эту кнопку "Пуск" , кнопка запуска должна быть отключена и кнопка "Стоп" включена.

Для этого я написал следующий код в методе "ActionPeformed (...)" кнопки "Пуск"

startButton.setEnabled(false);
stopButton.setEnabled(true);

Но приведенный выше код не создает желаемого влияния на графический интерфейс.

Является ли приведенный выше код правильным для того, что я хочу сделать?

Он тоже не работает с "repaint()".

Edit:

Код очень длинный, поэтому я не могу вставить весь код. Я могу сказать, однако, больше о коде.

В методе "запуска" "ActionPeformed" после вызова вышеуказанных двух операторов я выполняю поток "SwingWorker".

Является ли этот поток проблемой?

4b9b3361

Ответ 1

Для этого я написал следующий код в методе "ActionPeformed (...)" кнопки "Пуск"

Этот код должен находиться в actionPerformed(...) ActionListener, зарегистрированном с помощью кнопки "Пуск" , а не самой кнопки "Пуск" .

Вы можете добавить простой ActionListener следующим образом:

JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        startButton.setEnabled(false);
        stopButton.setEnabled(true);
     }
   }
 );

обратите внимание, что в приведенном выше примере ваш startButton должен быть final, если вы хотите создать анонимный прослушиватель в локальной области.

Ответ 2

Код очень длинный, поэтому я не могу вставить весь код.

Может существовать множество причин, по которым ваш код не работает. Возможно, вы дважды указали переменные кнопки, так что вы фактически не изменяете включение/выключение кнопки, как вы думаете. Возможно, вы блокируете EDT.

Вам нужно создать SSCCE для публикации на форуме.

Таким образом, вы можете изолировать проблему. Начните с простой рамки, а две кнопки и посмотрите, работает ли ваш код. Как только вы получите это, попробуйте запустить Thread, который просто спит в течение 10 секунд, чтобы увидеть, работает ли он еще.

Узнайте, как базовая работа работает прежде, чем писать 200-строчную программу.

Узнайте, как выполнить базовую отладку, мы не читатели. Мы не можем догадаться, какую глупую ошибку вы делаете, основываясь на вашем словесном описании проблемы.

Ответ 3

Это работает.

public class TestButton {

public TestButton() {
    JFrame f = new JFrame();
    f.setSize(new Dimension(200,200));
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());

    final JButton stop = new JButton("Stop");
    final JButton start = new JButton("Start");
    p.add(start);
    p.add(stop);
    f.getContentPane().add(p);
    stop.setEnabled(false);
    stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(true);
            stop.setEnabled(false);

        }
    });

    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(false);
            stop.setEnabled(true);

        }
    });
    f.setVisible(true);
}

/**
 * @param args
 */
public static void main(String[] args) {
    new TestButton();

}

}