2009-10-26 9 views
21

Stworzyłem aplikację huśtawek i jest przycisk "Start" na GUI. Chcę, aby za każdym razem, gdy kliknąłem na przycisk "Start", przycisk uruchamiania powinien być wyłączony, a przycisk "Stop" musi być włączony.Jak wyłączyć javax.swing.JButton w java?

Za to ja napisałem następujący kod w „ActionPeformed (...)” metoda przycisku „Start”

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

Ale powyższy kod nie jest tworzenie pożądanego wpływu na GUI.

Czy powyższy kod jest prawidłowy dla tego, co chcę zrobić?

Nie działa także z opcją "repaint()".

Edit:

Kod jest bardzo długa, więc nie mogę wkleić cały kod. Mogę jednak powiedzieć więcej o kodzie.

W metodzie "ActionPeformed" przycisku "start", po wywołaniu powyższych dwóch instrukcji, uruchamiam wątek "SwingWorker".

Czy ten wątek tworzy jakiś problem?

+2

Powyższe powinno zadziałać i nie powinieneś wywoływać funkcji repaint(), możesz umieścić więcej kodu w swojej logice. – broschb

+0

Inną możliwością byłoby użycie przycisku Start również jako przycisku stop (w zależności od potrzeb), wystarczy zapisać aktualny stan i po prostu zmienić tekst. – svens

Odpowiedz

19

Za to ja napisałem następujący kod w „ActionPeformed (...)” Metoda przycisku „Start”

trzeba, że ​​kod, aby być w actionPerformed(...) z ActionListener zarejestrowany za pomocą przycisku Start, a nie samego przycisku Uruchom.

Możesz dodać prosty ActionListener takiego:

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

pamiętać, że startButton powyżej będą musiały być final w powyższym przykładzie, jeśli chcesz utworzyć anonimową słuchacza w zakresie lokalnym.

+0

Wiem, że już i robię to samo w prawidłowym działaniu. Wydana metoda ... lol –

+0

Przepraszam, tylko próbuję pomóc. – akf

+0

Nigdy nie zdefiniowałeś stopButton –

3

To działa.

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

Kod jest bardzo długa, więc nie mogę wkleić cały kod.

Może być wiele przyczyn, dla których Twój kod nie działa. Być może dwukrotnie zadeklarowałeś zmienne przycisku, więc właściwie nie zmieniasz włączania/wyłączania przycisku, tak jak myślisz, że jesteś. Może blokujesz EDT.

Musisz utworzyć SSCCE, aby opublikować post na forum.

Tak więc od Ciebie zależy, jak wyizolować problem. Zacznij od prostej ramki z dwoma przyciskami i sprawdź, czy twój kod działa. Gdy już to zrobisz, spróbuj uruchomić wątek, który po prostu śpi przez 10 sekund, aby sprawdzić, czy nadal działa.

Dowiedz się, jak działa podstawowa praca przed napisaniem programu 200 linii.

Dowiedz się, jak przeprowadzić podstawowe debugowanie, nie jesteśmy czytelnikami umysłu. Nie możemy zgadywać, jaki głupi błąd popełniacie w oparciu o swój słowny opis problemu.

+2

Zgoda, czy chcesz, aby ta łyżka została ci podana? Potrzebujesz pomocy, ale otrzymasz pomoc, gdy nie będziesz miał jasności. Stworzyłem i przykład, jak poniżej, ale nazywane SwingWorker na naciśnięciu przycisku, i działało dobrze w moim przykładzie. Zacznij od rzeczy, które działają i buduj to, czego chcesz. – broschb

Powiązane problemy