0

私はこれを作りました:

private JComboBox vehicleType = new JComboBox();
DefaultComboBoxModel<Class> dcbm = new DefaultComboBoxModel<Class>( 
        new Class[] {Truck.class, Trailer.class, RoadTractor.class, SemiTrailer.class, Van.class, Car.class})
{
    @Override
    public String getSelectedItem() {
        return ((Class<?>)super.getSelectedItem()).getSimpleName();
    }

};

そして、私はこれを得ました:

ここに画像の説明を入力

ご覧のとおり、選択した項目には単純なクラス名が表示されていますが、リストには表示されていません。どうすればこれを作ることができますか?

4

3 に答える 3

1

デフォルトでは、comboBox を埋めるときに、toString()すべての要素のメソッドが呼び出されます。Classのメソッドは、こちらでtoString()説明されているように完全なクラス名を返します。メソッドでは、もちろんクラスの単純な名前を返します。getSelectedItem()getSimpleName()

問題を解決するには、カスタムリスト セル レンダラーを作成し、上書きする必要がありますgetListCellRendererComponent

于 2014-10-14T09:20:31.747 に答える
1

JComboBoxメソッドを使用しtoString()てラベルを取得する場合、 を実装することで動作をオーバーライドできますListCellRenderer

vehicleType.setRenderer(new DefaultListCellRenderer() {
    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if(value != null) {
            setText(((Class)value).getSimpleName());
        }
        return this;
    }
});

また、このメソッドを使用する場合はgetSelectedItem()、レンダラーに干渉するため、モデルのオーバーライドを削除する必要があります。

于 2014-10-14T09:13:11.503 に答える
0

カスタムListCellRendererを作成する必要があります。

于 2014-10-14T09:10:32.157 に答える