web-dev-qa-db-ja.com

アクションリスナーを使用して、特定のボタンがクリックされたかどうかを確認するにはどうすればよいですか?

プログラムの列に配置されたボタンの4つのリストがあります。現在のところ、ボタンがクリックされたかどうかを確認する4つのループがあります。各リストをループして特定のボタンがクリックされたかどうかを確認する代わりに、ボタンがクリックされたかどうかを確認する簡単な方法はありますか? 「actionSource == anybutton」かどうかを確認する簡単な方法があるはずです...

6
mbreen

各ボタンに匿名の内部クラスを使用します。

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

または、ロジックが関連している場合は、リスナーを共有できます。

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);
    }
}
22
camickr

各ボタンに個別のリスナーを追加し、すべてのボタンに1つの共通リスナーを追加できます。 「押された任意のボタン」に応答するように共通リスナーをプログラムします。

1
duffymo

ボタンをクリックするたびに、どのボタンを押したかに関係なく、actionPerformedメソッドがトリガーされます。

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