2009-10-26 22 views
21

He creado una aplicación de columpios y hay un botón de "Inicio" en la GUI. Quiero que cada vez que haga clic en el botón "Inicio", el botón de inicio se desactive y se habilite el botón "Detener".Cómo deshabilitar javax.swing.JButton en java?

Por lo que he escrito el código siguiente en el método del botón "Inicio"

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

Pero el código anterior no está creando el efecto deseado en la interfaz gráfica de usuario "ActionPeformed (...)".

¿El código anterior es correcto para lo que quiero hacer?

No funciona con "repintado()" también.

Editar:

El código es muy largo, así que no puede pegar todo el código. Sin embargo, puedo decir más sobre el código.

En el método "ActionPeformed" del botón "inicio", después de llamar a las dos afirmaciones anteriores, estoy ejecutando un subproceso "SwingWorker".

¿Este hilo crea algún problema?

+2

Lo anterior debería funcionar, y no debería necesitar llamar a repintado(), podría publicar más código en su lógica. – broschb

+0

Otra posibilidad sería usar el botón de inicio también como botón de detención (depende de sus necesidades), es suficiente para guardar el estado actual y simplemente cambiar el texto. – svens

Respuesta

19

Por lo que he escrito el código siguiente en el método del botón "Inicio"

necesita ese código para estar en el actionPerformed(...) del ActionListener registrada "ActionPeformed (...)" con el botón de inicio, no para el botón de inicio.

Puede agregar un simple ActionListener así:

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

nota que su startButton anterior tendrá que ser final en el ejemplo anterior, si se desea crear el oyente anónimo en ámbito local.

+0

Ya lo sé y estoy haciendo lo mismo en el método correcto actionPerformed ... lol –

+0

lo siento, solo estoy tratando de ayudar. – akf

+0

Nunca definió stopButton –

3

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

} 

}

7

El código es muy largo, así que no puedo pegar todo el código.

Puede haber una serie de razones por las cuales su código no funciona. Tal vez hayas declarado las variables del botón dos veces, por lo que no estás realmente cambiando la activación/desactivación del botón como crees que eres. Tal vez estás bloqueando el EDT.

Necesita crear un SSCCE para publicar en el foro.

Depende de usted para aislar el problema. Comience con un marco simple que tenga dos botones y vea si su código funciona. Una vez que lo hagas funcionar, intenta comenzar un hilo que simplemente duerme durante 10 segundos para ver si todavía funciona.

Aprenda cómo funciona el basice antes de escribir un programa de 200 líneas.

Aprenda cómo hacer algunas depuraciones básicas, no somos lectores de la mente. No podemos adivinar qué error tan tonto estás haciendo en base a tu descripción verbal del problema.

+2

De acuerdo, ¿quiere que le den esta cuchara? Desea la ayuda, pero la ayuda negativa recibió cuando no estaba claro. Creé y ejemplo, como a continuación, pero llamé a SwingWorker en el botón presionar, y funcionó bien en mi ejemplo. Comience poco a poco con cosas que funcionan y desarrolle lo que quiere. – broschb