Swing/SortingAnimations のバックアップの現在との差分(No.5)
TITLE:JComboBoxのモデルとしてenumを使用する
Posted by terai at 2007-07-09
JComboBoxのモデルとしてenumを使用する
JComboBoxのモデルとしてenumを使用します。- category: swing folder: SortingAnimations title: JComboBoxのモデルとしてenumを使用する tags: [JComboBox, Enum, Animation, SwingWorker] author: aterai pubdate: 2007-07-09T14:59:22+09:00 description: JComboBoxのモデルとしてenumを使用します。 image:
概要
JComboBox
のモデルとしてenum
を使用します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
private static enum SortAlgorithms {
Isort ("Insertion Sort"),
Selsort ("Selection Sort"),
Isort("Insertion Sort"),
Selsort("Selection Sort"),
Shellsort("Shell Sort"),
Hsort ("Heap Sort"),
Qsort ("Quicksort"),
Qsort2 ("2-way Quicksort");
Hsort("Heap Sort"),
Qsort("Quicksort"),
Qsort2("2-way Quicksort");
private final String description;
private SortAlgorithms(String description) {
this.description = description;
}
#spanadd
#spanend
@Override public String toString() {
return description;
}
}
#spandel
private final JComboBox algorithmsChoices = new JComboBox(SortAlgorithms.values());
#spanend
#spanadd
JComboBox<SortAlgorithms> algorithmsChoices =
#spanend
new JComboBox<>(SortAlgorithms.values());
解説
enum型でJComboBoxのモデルを作成しています。上記のコードでは、Enum#toString()メソッドをオーバーライドして、JComboBoxの表示はユーザーに分かりやすい名前になるようにしています。解説
enum
型でJComboBox
のモデルを作成しています。上記のコードでは、Enum#toString()
メソッドをオーバーライドして、JComboBox
の表示はユーザーに分かりやすい名前になるようにしています。
コード中で、どのアイテムが選択されているかなどを調べる場合などは、例えば以下のようにして使用します。
#spandel
switch((SortAlgorithms)algorithmsChoices.getSelectedItem()) {
#spanend
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;
#spanadd
switch ((SortAlgorithms) algorithmsChoices.getSelectedItem()) {
#spanend
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 以上が必要
- ゴミが残らないよう全部の点を書き換えている
- 点が増えるとオリジナルに比べてかなり遅い*1
- アニメーション中は、paintComponentsを使わず、自前のダブルバッファリングを使用
- ソートアニメーション自体は
Sorting Algorithm Animations from Programming Pearlsのアプレットから基本部分をコピーしてSwing
に移植-
SwingWorker
(JDK 6
以上)を使用したキャンセル機能を追加 - 全画面の書き換えを止めて移動する円図形の領域のみウェイトを入れて再描画するように変更
-
参考リンク
参考リンク
-
Sorting Algorithm Animations from Programming Pearls - Lesson: Performing Custom Painting (The Java™ Tutorials > Creating a GUI With JFC/Swing)
- Enum定数を選択するJRadioButtonのButtonGroupやJComboBoxを作成する