2009-10-26 9 views
21

Ich habe eine Schaukeln Anwendung erstellt und es gibt eine Schaltfläche "Start" auf der Benutzeroberfläche. Ich möchte, dass, wann immer ich auf diesen "Start" -Knopf geklickt habe, die Start-Taste deaktiviert werden sollte und die "Stop" -Taste aktiviert werden sollte.Wie javax.swing.JButton in Java deaktivieren?

Dafür habe ich den folgenden Code in der „ActionPeformed (...)“ geschrieben Methode der Schaltfläche „Start“

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

Aber der obige Code schafft nicht die Auswirkung auf die GUI gewünscht.

Ist der obige Code richtig für das, was ich tun möchte?

Es funktioniert auch nicht mit "repaint()".

Edit:

Der Code ist sehr lang, so kann ich nicht den ganzen Code einfügen. Ich kann jedoch mehr über den Code erzählen.

In der "ActionPeformed" -Methode von "Start" -Schaltfläche, nach dem Aufruf der oben genannten zwei Anweisungen, führe ich einen "SwingWorker" -Thread.

Ist dieser Thread ein Problem?

+2

Das obige sollte funktionieren, und Sie sollten Repaint() nicht aufrufen müssen, könnten Sie mehr Code in Ihrer Logik posten. – broschb

+0

Eine andere Möglichkeit wäre, die Start-Taste auch als Stop-Taste zu verwenden (hängt von Ihren Bedürfnissen ab), es genügt, den aktuellen Zustand zu speichern und nur den Text zu ändern. – svens

Antwort

19

Dafür habe ich den folgenden Code in der "ActionPeformed (...)" geschrieben Methode der Schaltfläche "Start"

Sie diesen Code benötigen in der actionPerformed(...) des ActionListener sein registriert mit der Schaltfläche Start, nicht für die Schaltfläche Start selbst.

Sie können eine einfache ActionListener wie folgt hinzu:

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

beachten Sie, dass Ihre Startbutton müssen oben final im obigen Beispiel sein, wenn Sie den anonymen Zuhörer in lokalen Bereich erstellen möchten.

+0

Ich weiß das schon und mache das gleiche in der richtigen actionPerformed Methode ... lol –

+0

sorry, versuche nur zu helfen. – akf

+0

Sie haben nie definiert StopButton –

3

Das funktioniert.

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

Der Code ist sehr lang, so kann ich nicht den gesamten Code einfügen.

Es könnte eine Reihe von Gründen geben, warum Ihr Code nicht funktioniert. Vielleicht haben Sie die Schaltflächenvariablen zweimal deklariert, so dass Sie nicht wirklich die Aktivierung/Deaktivierung der Schaltfläche ändern, so wie Sie das denken. Vielleicht blockieren Sie den EDT.

Sie müssen eine SSCCE erstellen, um im Forum zu veröffentlichen.

Es liegt also an Ihnen, das Problem zu isolieren. Beginnen Sie mit einem einfachen Rahmen und sehen Sie, ob Ihr Code funktioniert. Sobald Sie das funktioniert haben, dann versuchen Sie einen Thread, der einfach für 10 Sekunden schläft, um zu sehen, ob es noch funktioniert.

Erfahren Sie, wie die Basise zuerst arbeiten, bevor Sie ein Programm mit 200 Zeilen schreiben.

Erfahren Sie, wie Sie ein grundlegendes Debugging durchführen, wir sind keine Gedankenleser. Wir können nicht erraten, welchen dummen Fehler Sie aufgrund Ihrer verbalen Beschreibung des Problems machen.

+2

Einverstanden, möchten Sie diesen Löffel zu Ihnen gefüttert? Sie möchten die Hilfe, aber die Hilfe von Downvote erhalten, wenn Sie nicht klar waren. Ich erstellte und Beispiel, wie unten, aber rief einen SwingWorker beim Drücken der Taste, und es hat in meinem Beispiel gut funktioniert. Beginne klein mit Dingen, die funktionieren und baue, was du willst. – broschb

Verwandte Themen