【问题标题】:How do I populate a JavaFX ChoiceBox with data from the Database?如何使用数据库中的数据填充 JavaFX 选择框?
【发布时间】:2013-03-21 17:54:10
【问题描述】:
private void initialize() {
    loadPersistenceContext();

    List<Events> events = getEventsChoiceBox(getPersistenceContext());
    ObservableList<Event> data = FXCollections.observableList(events);

    cbEvent.setItems(data); // Inserting data into the ChoiceBox
}

这是我的主要代码。问题是加载表单时,我将对象插入到选择框中,而不是属性。

这是我的列表事件的内容

Object[]
|- String
|- Integer
Object[]
|- String
|- Integer

所以我想要一个带有 String 属性的 ChoiceBox,并将 Integer 映射到我的控制器。

我尝试了很多东西,但无法弄清楚。

【问题讨论】:

  • 我觉得你的问题有点难以理解,但看看这个example of a JavaFX ChoiceBox control backed by Database IDs 是否有帮助,因为它似乎解决了与你所问的问题有点相似的问题。
  • 我知道这有点令人困惑,因为我不知道如何清楚地表达这一点,但这个例子很有帮助!非常感谢! :)

标签: java javafx


【解决方案1】:

这是forums.oracle.com的另一个简单实现

为键值创建一个类

public class KeyValuePair {
   private final String key;
   private final String value;
   public KeyValuePair(String key, String value) {
   this.key = key;
   this.value = value;
   }

  public String getKey()   {    return key;    }

  public String toString() {    return value;  }
}

然后将 ChoiceBox 创建为:

ChoiceBox<KeyValuePair> choiceBox = new ChoiceBox<KeyValuePair>();

将元素填充为;

choiceBox .getItems().add(new KeyValuePair("1", "Active"));

提示:将数据库中的键值对检索到 ArrayList 中并进行迭代

要检索值:

choiceBox.getValue().getKey();  // returns the "1"
choiceBox.getValue().toString();  // returns the "Active"

【讨论】:

    【解决方案2】:

    请参阅JavaFX ChoiceBox control backed by Database IDs 的此示例。

    该示例通过定义一个 Choice 类来工作,该类由数据库行 ID 和要在“选择”框中显示的项目的字符串表示形式组成。 Choice 的默认 toString 方法被自定义实现覆盖,该实现返回要显示的项目的字符串表示形式,而不是数据库 ID。当您将选项添加到 ChoiceBox 时,ChoiceBox 会将每个选项转换为字符串以供显示。 Choice 显示的字符串值只是选择文本,而不是包含数据库 ID 或使用 Choice 的默认 toString,只会显示无意义的对象引用。

    选择框示例应用的输出:

    还可以考虑使用ComboBox 来实现这种实现,因为它内置了一种机制,可以从节点的显示中抽象出节点的值(通过CellFactory)。然而,ComboBox 的使用通常比 ChoiceBox 更复杂。

    【讨论】:

      【解决方案3】:

      或者干脆做:myChoiceBox.setConverter(myStringConverter),传入你自己的javafx.util.StringConverter(JavaDoc) 子类的实例。

      重写 toString(和 fromString)让您可以完全控制对象的显示方式,而无需在对象本身中实现 ​​toString

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-07
        • 2017-09-13
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多