У меня есть пример кода с помощью Swing.Действия, выполняемые на jButton после отключения
package playerlist;
import java.awt.FlowLayout;
import javax.swing.*;
import java.awt.event.*;
public class Sample extends JFrame{
private JButton button1;
private JButton button2;
public Sample(){
super();
setTitle("Sample JFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button1 = new JButton("Button 1");
button2 = new JButton("Button 2");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button1ActionPerformed(e);
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button2ActionPerformed(e);
}
});
setLayout(new FlowLayout());
add(button1);
add(button2);
pack();
}
private void button1ActionPerformed(ActionEvent ae){
button1.setEnabled(false);
button2.setEnabled(false);
try{
Thread.sleep(5000);
}catch(Exception e){
}
System.out.println("*** Button 1 Clicked ***");
button1.setEnabled(true);
button2.setEnabled(true);
}
private void button2ActionPerformed(ActionEvent ae){
button1.setEnabled(false);
button2.setEnabled(false);
try{
Thread.sleep(5000);
}catch(Exception e){
}
// I have disabled this button from button 1's action, but still when I click this button within
// 5 seconds, actions of this button is performed
System.out.println("*** Button 2 Clicked ***");
button1.setEnabled(true);
button2.setEnabled(true);
}
public static void main(String [] args){
new Sample().setVisible(true);
}
}
Я хочу как - когда я нажимаю button1 (когда начинается действие BUTTON1 в), должны быть отключены button1 и button2 (если нажать на кнопку инвалидов, не следует проводить никаких действий). Я отключил обе кнопки, используя setEnabled (false). И когда действие кнопки 1 завершается, обе кнопки должны быть включены. Но в моем коде это не работает, даже после отключения кнопки, действия выполняются на отключенной кнопке. В действии кнопки1 я отключил обе кнопки и использовал метод сна, чтобы приостановить выполнение (для симуляции тяжелой работы) в течение 5 секунд, но в течение 5 секунд. Если я нажму на любую кнопку, их действия будут активированы после завершения действия кнопки1. Пожалуйста, помогите мне. Я предоставил образец кода, когда вы его запустили, и после нажатия кнопки1, затем сразу кнопку2, выполняются действия обеих кнопок. Я хочу, когда я нажимаю кнопки, тяжелая работа будет сделана в действии нажатия кнопки, а пока я отключу все кнопки, так что никаких других действий не будет. Когда первое действие завершится, я включу все кнопки. Пожалуйста, помогите мне. Спасибо заранее.
+1 для не спать на EDT - хотя .. спать в действии Таймера не лучше: подтолкнет вас к редактированию, что вы на самом деле означаете длительную задержку (чтобы имитировать длительную задачу и проверить, что базовая логика OP в порядке :-) – kleopatra
+1 Для тяжелой работы, также рассмотрите 'SwingWorker'; этот [пример] (http://stackoverflow.com/a/11372932/230513) отключает 'startButton' до' done() '. – trashgod