私は Java を学んでおり、現在 Swing を使用しています。ドロップダウン ボックスを作成するときは、オプションとして表示したいものを含む配列を作成します。しかし、たとえば、ドロップダウン ボックスに 1900 年から 2013 年をリストするようにしたいとします。1 つの巨大な配列にすべてを入力するのではなく、これらの数字をリストするためのより適切で迅速な方法はありますか? 配列に2つのパラメータ間のすべての値を保持させたいと言うことができますか?
4 に答える
ドロップダウン ボックスを作成するときは、オプションとして表示したいものを含む配列を作成します。しかし、たとえば、ドロップダウン ボックスに 1900 年から 2013 年までをリストしたいとします。
JComboBoxの代わりにSpinnerDateModelでJSpinnerを使用する
それ以外の場合は、 の一部を実装する必要があります。
AutoCompete for JComboBox
これは、1k アイテムの範囲がまったくユーザーフレンドリーでなく、機能せず、このオブジェクトでの選択に煩わされるためです。または(年を表す)の代わりに入れ
Date
て、ユーザーの選択から操作したい場合DefaultComboBoxModel
int
Integer
Date instance
これらの行に沿ったものは、必要な年の ArrayList を生成する必要があります。
ArrayList<String> myArray = new ArrayList<>();
for(int i = 1900; i < 2014; i++){
myArray.add(Integer.toString(i));
}
for(String s : myArray){
System.out.println(s);
}
このようなリストを生成することは、動的に作成すること、または「実行時に」作成することとして知られていると思います。
何年もループするだけでなく、さまざまなアプローチを使用できます。
たとえば、コンボボックスのカスタム モデルを作成できます。
ComboBoxModel model = new DefaultComboBoxModel ()
{
@Override
public Object getElementAt ( int index )
{
return 1900 + index;
}
@Override
public int getSize ()
{
return 114;
}
};
JComboBox comboBox = new JComboBox ( model );
目的のリストを生成するには、これで十分です。
もちろん、単純な配列をデータとして使用することもできます。
Integer[] years = new Integer[ 114 ];
for ( int i = 0; i <= 113; i++ )
{
years[ i ] = 1900 + i;
}
ComboBoxModel model = new DefaultComboBoxModel ( years );
JComboBox comboBox = new JComboBox ( model );
それぞれのアプローチには長所と短所があります。
モデルの「アプローチ」は、アプリケーションの開始時に消費するリソースがはるかに少なくなります (リストが非常に大きい場合)。ただし、コンボボックス レンダラーが値を呼び出すたびに、または値を取得しようとするたびに値が生成されます (少なくとも私の単純な例では)。実装 - 値のキャッシュを追加できます。これにより、その問題が修正されます)。
値の「アプローチ」は、いくつかの単純なケースではコーディングが少なくて済み、より明白です。