自分のThreadの使い方の練習のために簡単スロットマシンを作ってみようかと。
とりあえず入れ物だけ作りました。
敢えてクラス分けせず、JFrameを継承したクラスにどっちゃりとインターフェース乗っけてやってみようかと。
目算としては、KeyListenerのKeyPressedでThreadをstartさせて、多分そうすることで、Runnableのrunメソッドが動くはず、そこで無限ループでJTextFieldの中を変え続け、
ActionインターフェースのactionPerformedでボタンの押下を拾い、何らか用意するフラグを書き換える。
3つのフラグが書き換わったら、ループを抜ける、という仕組みで考えておりやす。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Slot extends JFrame implementsAction, Runnable ,KeyListener{
//コンストラクタ
Slot(){
setTitle(“超簡単スロットマシン”);
setBounds(100, 100, 600, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
//トップのラベル
JPanel p = new JPanel();
p.setBackground(Color.ORANGE);
JLabel label = new JLabel();
label.setText(“押忍!店長! (スペースキーでスタート)”);
p.add(label);
getContentPane().add(p, BorderLayout.NORTH);
//トップのラベルここまで
//一番下のボタン
JPanel botomP = new JPanel();
botomP.setLayout(new GridLayout(1,3));
JButton btn1 = new JButton(“ストップ”);
JButton btn2 = new JButton(“ストップ”);
JButton btn3 = new JButton(“ストップ”);
btn1.setActionCommand(“stop1”);
btn1.addActionListener(this);
btn2.setActionCommand(“stop2”);
btn2.addActionListener(this);
btn3.setActionCommand(“stop3”);
btn3.addActionListener(this);
botomP.add(btn1);
botomP.add(btn2);
botomP.add(btn3);
getContentPane().add(botomP, BorderLayout.SOUTH);
JPanel centerP = new JPanel();
centerP.setLayout(new GridLayout(1,3));
JTextField field1 = new JTextField();
field1.setEnabled(false);
JTextField field2 = new JTextField();
field2.setEnabled(false);
JTextField field3 = new JTextField();
field3.setEnabled(false);
centerP.add(field1);
centerP.add(field2);
centerP.add(field3);
getContentPane().add(centerP, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自動生成されたメソッド・スタブ
System.out.println(e.getActionCommand());
}
@Override
public void run() {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public Object getValue(String key) {
// TODO 自動生成されたメソッド・スタブ
return null;
}
@Override
public void putValue(String key, Object value) {
// TODO 自動生成されたメソッド・スタブ
}
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Slot slot =new Slot();
slot.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void keyPressed(KeyEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void keyReleased(KeyEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
}
今のところこんな感じ。