Como desativar javax.swing.JButton em java?
-
06-07-2019 - |
Pergunta
Eu criei uma aplicação de balanços e há um botão "Iniciar" no GUI. Quero que sempre que eu cliquei em que o botão "Start", o botão de arranque deve ser desativado e o botão "Stop" ser habilitado.
Por que eu escrevi o seguinte código no "ActionPeformed (...)" método do botão "Iniciar"
startButton.setEnabled(false);
stopButton.setEnabled(true);
Mas o código acima é não criar o efeito desejado na GUI.
O código acima correto para o que eu quero fazer?
Não está funcionando com "repaint ()" também.
Editar:
O código é muito longa, então eu não pode colar todo o código. Posso dizer, no entanto, mais sobre o código.
No "ActionPeformed" método do botão "iniciar", depois de chamar o acima duas declarações, estou executando um thread "SwingWorker".
É esta discussão criar qualquer problema?
Solução
Por que eu escrevi o seguinte código no "ActionPeformed (...)" método do botão "Iniciar"
Você precisa que o código a ser no actionPerformed(...)
do ActionListener
registrado com o botão Iniciar, não para o botão Iniciar em si.
Você pode adicionar um simples ActionListener
assim:
JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
startButton.setEnabled(false);
stopButton.setEnabled(true);
}
}
);
Note que o seu startButton acima terá de ser final
no exemplo acima, se você quiser criar o ouvinte anônimo em âmbito local.
Outras dicas
O código é muito longa, então não posso colar todo o código.
Pode haver qualquer número de razões pelas quais o seu código não funciona. Talvez você declarou que as variáveis ??botão duas vezes para que você não está realmente mudando ativar / desativar o botão como você pensa que é. Talvez você está bloqueando o EDT.
Você precisa criar uma SSCCE para postar no fórum.
Então, cabe a você para isolar o problema. Comece com um quadro simples thas dois botões e ver se suas obras de código. Depois de conseguir que o trabalho, em seguida, tentar iniciar um thread que simplesmente dorme por 10 segundos para ver se ele ainda funciona.
Saiba como o trabalho basice primeiro antes de escrever um programa de 200 linhas.
Saiba como fazer alguma depuração básica, não estamos mente dos leitores. Não podemos adivinhar o erro bobo que você está fazendo com base na sua descrição verbal do problema.
Isso funciona.
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();
}
}