TITLE:JComboBoxのモデルとしてenumを使用する

Posted by aterai at 2007-07-09

JComboBoxのモデルとしてenumを使用する

JComboBoxのモデルとしてenumを使用します。

  • &jnlp;
  • &jar;
  • &zip;
SortingAnimations.png

サンプルコード

private static enum SortAlgorithms {
  Isort    ("Insertion Sort"),
  Selsort  ("Selection Sort"),
  Shellsort("Shell Sort"),
  Hsort    ("Heap Sort"),
  Qsort    ("Quicksort"),
  Qsort2   ("2-way Quicksort");
  private final String description;
  private SortAlgorithms(String description) {
    this.description = description;
  }
  @Override public String toString() {
    return description;
  }
}
private final JComboBox algorithmsChoices = new JComboBox(SortAlgorithms.values());

解説

enum型でJComboBoxのモデルを作成しています。上記のコードでは、Enum#toString()メソッドをオーバーライドして、JComboBoxの表示はユーザーに分かりやすい名前になるようにしています。

コード中で、どのアイテムが選択されているかなどを調べる場合などは、例えば以下のようにして使用します。

switch((SortAlgorithms)algorithmsChoices.getSelectedItem()) {
  case Isort:     isort(number);       break;
  case Selsort:   ssort(number);       break;
  case Shellsort: shellsort(number);   break;
  case Hsort:     heapsort(number);    break;
  case Qsort:     qsort(0, number-1);  break;
  case Qsort2:    qsort2(0, number-1); break;
}

ソートアニメーション自体は、Sorting Algorithm Animations from Programming Pearlsから基本部分はそのままコピーして、Swingに移植しています。

  • SwingWorkerでキャンセル可能に
    • このため、実行するには、JDK 6 以上が必要
  • ゴミが残らないよう全部の点を書き換えている
    • 点が増えるとオリジナルに比べてかなり遅い(速すぎず、見やすいような気もするので…)
    • 全部書き換えるのを止めて、移動する点のみウェイトを入れてゆっくり描画するように修正
  • アニメーション中は、paintComponentsを使わず、自前のダブルバッファリングを使用
    • JPanelのダブルバッファリングを使用

参考リンク

コメント