Soru Java'da bir JButton'a nasıl ActionListener eklersiniz


private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");

Bu düğmelere eylem dinleyicilerini nasıl ekleyebilirim, böylece ana yöntemden arayabilirim actionperformed Onlara tıklandığında, onları programımda arayabilirim?


25
2017-11-12 18:40


Menşei




Cevaplar:


İki yol:

1. Sınıfınızda ActionListener uygulayın, ardından kullanın jBtnSelection.addActionListener(this);  Daha sonra, bir menthod tanımlamanız gerekir, public void actionPerformed(ActionEvent e). Ancak, bunu çoklu düğmeler için yapmak kafa karıştırıcı olabilir, çünkü actionPerformed yöntem her olayın kaynağını kontrol etmek zorunda kalacaktır (e.getSource()) hangi düğmeden geldiğini görmek için.

2. Anonim iç sınıfları kullan:

jBtnSelection.addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
    selectionButtonPressed();
  } 
} );

Daha sonra tanımlamanız gerekecek selectionButtonPressed(). Bu, birden çok düğmeniz olduğunda daha iyi çalışır, çünkü eylemleri yürütmek için bireysel yöntemlere yapılan çağrılarınız düğmenin tanımının hemen yanındadır.

İkinci yöntem, seçim yöntemini doğrudan çağırmanıza da olanak tanır. Bu durumda, arayabilirsin selectionButtonPressed() eğer başka bir eylem de meydana gelirse - zamanlayıcı bir zaman ya da bir şey olduğunda (ama bu durumda, yönteminiz farklı bir şekilde adlandırılırdı belki selectionChanged()).


45
2017-11-12 18:49



karışıklığımı çözdünüz, çok teşekkürler - Space Rocker
@Sara - Bu yardımcı oldu sevindim! Daha fazla açıklamayı düşünebilirseniz, bunları bu cevaba eklemekten memnuniyet duyarız. - David Koelle
Birisi sorarsa: Bir bileşen kendi olaylarını nasıl ele alabilir? Bu sorunun size gösterdiğiniz gibi anonim iç sınıfları kullanması yanıtı mı? - Marko Kitonjics
Şart değil. Özel bir bileşene sahip olabilirsiniz (örneğin, JComponent'i genişleten bir şey) ve ayrıca ActionListener, MouseListener vb. - David Koelle
ActionPerformed için @Override eklemek zorunda değil misiniz? - DoesData


En iyi bahsinizi gözden geçirmek Java Swing öğreticilerözellikle Düğmelerde öğretici.

Kısa kod snippet'i:

jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );

7
2017-11-12 18:46





Tamamen takip etmedim, ama bir eylem dinleyicisi eklemek için addActionListener (Soyut Düğmeden). Bu, sorunuzu tam olarak cevaplamazsa, biraz daha ayrıntı sağlayabilir misiniz?


1
2017-11-12 18:48