Вопрос

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

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

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

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

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

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

Редактировать:

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

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

Создает ли этот поток какие-либо проблемы?

Это было полезно?

Решение

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

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

Вы можете добавить простой ActionListener вот так:

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

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

Другие советы

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

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

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

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

Сначала узнайте, как работает basice, прежде чем писать программу из 200 строк.

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

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

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();

}

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top