2011-09-04 24 views
5

Programımda sütun içine düzenlenmiş 4 tane düğme listesi var. Şu an itibariyle bir butonun tıklanıp tıklanmadığını kontrol eden 4 döngüye sahibim. Belirli bir düğmenin tıklanıp tıklanmadığını görmek için her listeden bir döngü tıklatılıp tıklanmadığını kontrol etmenin basit bir yolu var mı? "ActionSource == anybutton" olup olmadığını kontrol etmenin daha kolay bir yolu olmalıdır ...Java eylem dinleyicisi

cevap

20

Kullanım anonim iç sınıflar:

JButton button = new JButton("Do Something"); 
button.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("Do Something Clicked"); 
    } 
}); 

Veya mantık ilgili olup olmadığını, o zaman bir dinleyici paylaşabilirsiniz:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ButtonCalculator extends JFrame implements ActionListener 
{ 
    private JButton[] buttons; 
    private JTextField display; 

    public ButtonCalculator() 
    { 
     display = new JTextField(); 
     display.setEditable(false); 
     display.setHorizontalAlignment(JTextField.RIGHT); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.setLayout(new GridLayout(0, 5)); 
     buttons = new JButton[10]; 

     for (int i = 0; i < buttons.length; i++) 
     { 
      String text = String.valueOf(i); 
      JButton button = new JButton(text); 
      button.addActionListener(this); 
      button.setMnemonic(text.charAt(0)); 
      buttons[i] = button; 
      buttonPanel.add(button); 
     } 

     getContentPane().add(display, BorderLayout.NORTH); 
     getContentPane().add(buttonPanel, BorderLayout.SOUTH); 
     setResizable(false); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     JButton source = (JButton)e.getSource(); 
     display.replaceSelection(source.getActionCommand()); 
    } 

    public static void main(String[] args) 
    { 
     UIManager.put("Button.margin", new Insets(10, 10, 10, 10)); 
     ButtonCalculator frame = new ButtonCalculator(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

Camickr gözümde bir Salıncak yetkilisidir. – duffymo

+0

Bir dinleyici paylaşın ... güzel, tavsiye için teşekkürler! Bu mükemmel çalıştı! – mbreen

1

Her düğme için tek bir dinleyici ve her düğme için bir ortak dinleyici ekleyebilirsiniz. "Dinlenen herhangi bir tuşa" yanıt vermek için ortak dinleyiciyi programlayın. Her düğme için

0

herhangi birine her bir düğmesini, bu tetikler actionPerformed yöntemi, hangi düğmeye bastığınıza bakılmaksızın.

public void actionPerformed(ActionEvent event) { 
    Object source = event.getSource(); 
    if (source instanceof JButton) System.out.println("You clicked a button!"); 
} 
+0

Halen açılan kutular ve menü öğeleri gibi dinleyicilere sahip başka bir nesneyim var. Belirli bir görevi yerine getirmek için sadece düğmelere ihtiyacım var, bir dinleyici ile tüm öğeleri değil. – mbreen

+0

@mbreen Güncellenmiş yanıtlara bakın. – fireshadow52