プログラムの列に配置されたボタンの4つのリストがあります。現在のところ、ボタンがクリックされたかどうかを確認する4つのループがあります。各リストをループして特定のボタンがクリックされたかどうかを確認する代わりに、ボタンがクリックされたかどうかを確認する簡単な方法はありますか? 「actionSource == anybutton」かどうかを確認する簡単な方法があるはずです...
各ボタンに匿名の内部クラスを使用します。
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);
}
}
各ボタンに個別のリスナーを追加し、すべてのボタンに1つの共通リスナーを追加できます。 「押された任意のボタン」に応答するように共通リスナーをプログラムします。
ボタンをクリックするたびに、どのボタンを押したかに関係なく、actionPerformed
メソッドがトリガーされます。
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source instanceof JButton) System.out.println("You clicked a button!");
}