Хранить данные в ComboBox javaFx [duplicate]

Очень хороший пример, который я могу дать вам для classcastException в Java, используется при использовании «Collection»

List list = new ArrayList();
list.add("Java");
list.add(new Integer(5));

for(Object obj:list) {
    String str = (String)obj;
}

. Этот выше код даст вам ClassCastException во время выполнения. Поскольку вы пытаетесь использовать Integer для String, это вызовет исключение.

5
задан sandboxj 18 December 2016 в 00:40
поделиться

2 ответа

Вы можете использовать пользовательский cellFactory, чтобы отображать элементы таким образом, который подходит вашим потребностям:

ComboBox<Dummy> comboBox = ...

Callback<ListView<Dummy>, ListCell<Dummy>> factory = lv -> new ListCell<Dummy>() {

    @Override
    protected void updateItem(Dummy item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty ? "" : item.getName());
    }

};

comboBox.setCellFactory(factory);
comboBox.setButtonCell(factory.call(null));
5
ответ дан fabian 18 August 2018 в 23:24
поделиться

Я предполагаю, что ComboBox вы имеете в виду: http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ComboBoxBase.html . Поскольку getValue() - public, вы можете сделать:

public class MyComboBox<T> extends ComboBox<T> {
  private final Dummy dummy;
  public MyComboBox(Dummy dummy) {
    this.dummy = dummy;
  }
  public T getValue() {
    return dummy.getName();
  }
}
-1
ответ дан Roberto Attias 18 August 2018 в 23:24
поделиться
  • 1
    Спасибо. Хотя я не верю, что вы прямо ответили на мой вопрос о том, как отображать свойство в ComboBox, а не о самом объекте, создание специального класса ComboBox - хорошее предложение! – sandboxj 17 December 2016 в 23:50
  • 2
    Зачем вам это делать? Это заменит тип объекта, возвращаемого с getValue на String, что во многих случаях приведет к ClassCastException. Кроме того, вы возвращаете имя того же Dummy, независимо от значений, выбранных в ComboBox. И последнее, но не менее важное getValue() - final и, следовательно, нельзя переоценить. – fabian 18 December 2016 в 13:07
Другие вопросы по тегам:

Похожие вопросы: