import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
class MyJButton extends JButton implements ActionListener, Runnable {
Thread thread;
public MyJButton(String label) {
super(label);
}
public Dimension getPreferredSize() {
return new Dimension(300, 100);
}
@Override
public void actionPerformed(ActionEvent e) {
if (thread == null) {
thread = new Thread(this);
thread.start();
} else {
thread = null;
}
FirstGUI.jf.pack();
System.out.println(e.getActionCommand());
}
int num = 0;
@Override
public void run() {
while (thread != null) {
num++;
setText("Second: " + num);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyThread extends Thread {
}
public class FirstGUI {
static JFrame jf;
public static void main(String[] args) {
System.out.println("FirstGUI");
jf = new JFrame("FirstGUI");
MyJButton jb = new MyJButton("Label Label Label");
// 古い書き方
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(jb, "Button was pressed.");
}
});
jb.addActionListener(jb);
// ラムダ式 (Java 8以降) 引数の型は自動的に推論される
jb.addActionListener(e -> System.out.println(e.getActionCommand() + " was pressed"));
// メソッド参照(ラムダ式をさらに簡潔にしたもの)
// 引数が1つで、その引数をそのままメソッドに渡す場合に使える(今回はActionEventをprintlnに送ってしまうので、すこし意味が異なる)
jb.addActionListener(System.out::println);
jf.getContentPane().add(jb);
// jf.setSize(300,200);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
}