Как отключить javax.swing.JButton в java?
Я создал приложение swings, и в GUI есть кнопка "Пуск" . Я хочу, чтобы всякий раз, когда я нажимал на эту кнопку "Пуск" , кнопка запуска должна быть отключена и кнопка "Стоп" включена.
Для этого я написал следующий код в методе "ActionPeformed (...)" кнопки "Пуск"
startButton.setEnabled(false);
stopButton.setEnabled(true);
Но приведенный выше код не создает желаемого влияния на графический интерфейс.
Является ли приведенный выше код правильным для того, что я хочу сделать?
Он тоже не работает с "repaint()".
Edit:
Код очень длинный, поэтому я не могу вставить весь код. Я могу сказать, однако, больше о коде.
В методе "запуска" "ActionPeformed" после вызова вышеуказанных двух операторов я выполняю поток "SwingWorker".
Является ли этот поток проблемой?
Ответы
Ответ 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();
}
}