Javaでクイズ暗記ツール作成(15)
ようやくマルチスレッド化した。
スレッドについてはとても無知だったので1から地道に学んだ。今も学習中なのでコードはもう少しましになってからブログなりどこかに残すつもりで。
ひとまずは問題の出題機構を別スレッドにして問題を1文字ずつ流れるように表示させ、その間に回答してもいいことにした。
大雑把には次のような機構で:
- MainでQuestionPanel(問題出題ようのパネル)のsetQuizメソッドを呼び出す。
- setQuizメソッドはQuestionPanelのrunメソッドを使って新規スレッドを作る。
- あとは作ったスレッドからSwingUtilities.invokeLaterでテキストを描画。といってもJLabelに対してsetText(getText + "差分")するだけ。
- 回答するなり別の問題にジャンプするなりしてMain側から再度setQuizが飛んでくると、スレッドが生きてれば割り込んで停止させるし、終わっていれば特に問題なく、また新規に描画スレッドを立てて別の問題を出す的な。
今のところ残件
メジャーな形式として未対応なのが線結びとタイピングだが、なんだかめんどくさくなってきた。
線結びのネックはカスタムコンポーネントの描画と、タイピングのネックはローマ字対応で、今のところローマ字は以下のようなMapを書いているが、あまりにもコードとしてイモな気がするのでなんとかならないかと思う。
public final Map<String, String> getRomanMap() { return new HashMap<String, String>() {{ put("A", "あ"); put("I", "い"); put("U", "う"); put("E", "え"); put("O", "お"); put("KA", "か"); put("KI", "き"); put("KU", "く"); put("KE", "け"); put("KO", "こ"); put("KKA", "っか"); put("KKI", "っき"); put("KKU", "っく"); put("KKE", "っけ"); put("KKO", "っこ"); ... }}; }
クイズ
たぶんライスタ魔龍あたりから本気だすと思う。
あと検定。