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?

Foi útil?

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

}

}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top