Soru Javax.swing.JButton java'da nasıl devre dışı bırakılır?


Bir salıncak uygulaması oluşturdum ve GUI'de bir "Başlat" düğmesi var. Bu "Başlat" düğmesine tıkladığımda, başlatma düğmesinin devre dışı bırakılması ve "Durdur" düğmesinin etkinleştirilmesini istiyorum.

Bunun için aşağıdaki kodu "Başlat" düğmesinin "ActionPeformed (...)" yöntemine yazdım.

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

Ancak yukarıdaki kod, GUI üzerinde istenen etkiyi oluşturmuyor.

Yukarıdaki kod, yapmak istediklerim için doğru mu?

O da "repaint ()" ile çalışmıyor.

Düzenle:

Kod çok uzun, bu yüzden tüm kodu yapıştıramam. Yine de, kod hakkında daha fazla bilgi verebilirim.

"Başlatma" düğmesinin "ActionPeformed" yönteminde, yukarıdaki iki deyimi çağırdıktan sonra, bir "SwingWorker" iş parçacığı yürütüyorum.

Bu iş parçacığı sorun yaratıyor mu?


21
2017-10-26 16:44


Menşei


Yukarıdakiler işe yaramaz ve repaint () 'i çağırmanıza gerek yoktur, mantığınıza daha fazla kod gönderebilir misiniz? - broschb
Başka bir olasılık da start butonunu da stop butonu olarak kullanmaktır (ihtiyaçlarınıza göre), mevcut durumu kaydetmek ve sadece metni değiştirmek yeterlidir. - svens


Cevaplar:


Bunun için aşağıdaki kodu "Başlat" düğmesinin "ActionPeformed (...)" yöntemine yazdım.

İçinde olmak için bu koda ihtiyacınız var actionPerformed(...) arasında ActionListener Start (Başlat) düğmesiyle kayıtlı, Start (Başlat) düğmesinin kendisi için değil.

Basit ekleyebilirsiniz ActionListener bunun gibi:

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

Yukarıdaki startButtonunuzun olması gerektiğini unutmayın final Yerel kapsamda anonim dinleyici oluşturmak istiyorsanız yukarıdaki örnekte.


20
2017-10-26 16:48



Bunu zaten biliyorum ve doğru actionPerformed yönteminde aynı şeyi yapıyorum ... lol - Yatendra Goel
Üzgünüm, sadece yardım etmeye çalışıyorum. - akf
StopButton'u hiç tanımladın - Don Larynx


Kod çok uzun olduğu için yapıştırılamıyorum   tüm kod

Kodunuzun çalışmadığı birçok sebep olabilir. Belki de buton değişkenlerini iki kez ilan ettiniz, bu yüzden siz gerçekten de düşündüğünüz gibi düğmeyi etkinleştirme / devre dışı bırakma şeklini değiştirmiyorsunuz. Belki de EDT'yi engelliyorsunuzdur.

Bir tane oluşturmanız gerekir SSCCE forumda yayınlamak için.

Yani problemi izole etmek size kalmış. Basit bir kare ile başlayın, iki düğmeli ve kodunuzun çalışıp çalışmadığını görün. Çalışmayı tamamladıktan sonra, hala çalışıp çalışmadığını görmek için 10 saniye boyunca uyuyan bir İplik başlatmayı deneyin.

Temel yazmanın 200 satırlık bir program yazmadan önce nasıl çalıştığını öğrenin.

Bazı temel hata ayıklamalarını nasıl yapacağınızı öğrenin, okuyucularımıza zarar vermeyiz. Sorunun sözel açıklamasına dayanarak ne kadar aptalca bir hata yaptığınızı tahmin edemeyiz.


7
2017-10-26 17:13



Anlaştık, bu kaşığı sana mı vermek istiyorsun? Yardımı istiyorsun, ama net olmadığın zaman reddedildi. Aşağıdaki gibi oluşturdum ve örnek aldım, ancak düğme basında SwingWorker denir ve örneğimde iyi çalıştı. İstediğiniz şeylerle çalışarak küçük şeyler yapmaya başlayın. - broschb


Bu çalışıyor.

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

}

}


3
2017-10-26 16:52