kiyo_hikoのブログ

メモ+日記?

Javaでクイズ暗記ツール作成(15)

ようやくマルチスレッド化した。


スレッドについてはとても無知だったので1から地道に学んだ。今も学習中なのでコードはもう少しましになってからブログなりどこかに残すつもりで。
ひとまずは問題の出題機構を別スレッドにして問題を1文字ずつ流れるように表示させ、その間に回答してもいいことにした。
f:id:kiyo_hiko:20130925224008p:plain:w240

大雑把には次のような機構で:

  • 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", "っこ");
...
	}};
}

クイズ

たぶんライスタ魔龍あたりから本気だすと思う。
あと検定。