java - 与 ObservableMap 绑定(bind)的组合

标签 java user-interface javafx controlsfx

我有一个使用 ObservableMap<String, Member> 填充的组合。我想要的是,如果在组合中选择一个项目(键),则能够获取相应的对象(值)。这是我到目前为止所拥有的

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.logging.Level;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import org.controlsfx.control.textfield.TextFields;

public class ComboWithHashMap extends Application{
    private ComboBox autocompleteCombo = new ComboBox();
    private ObservableMap<String, Member> list;

    public static void main(String[] args) {
       launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Combo Sample");
        primaryStage.setWidth(450);
        primaryStage.setHeight(550);

        list = FXCollections.observableMap(getActiveMember());
        autocompleteCombo.getItems().setAll(list.keySet());
        //TextFields.bindAutoCompletion(autocompleteCombo.getEditor(), autocompleteCombo.getItems());
        Scene scene = new Scene(new BorderPane(autocompleteCombo), 880, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public HashMap<String, Member> getActiveMember(){
        HashMap<String, Member> map = new HashMap<String, Member>();
        Member member1 = new Member(1, "123", "John Doe");
        Member member2 = new Member(2, "234", "Sally Doe");
        Member member3 = new Member(3, "345", "Billy Doe");
        Member member4 = new Member(4, "567", "Mac Doe");
        Member member5 = new Member(5, "789", "Win Doe");

        map.put( member1.getMilkNo(), member1);
        map.put( member2.getMilkNo(), member2);
        map.put( member3.getMilkNo(), member3);

        return map;
    }

    public class Member {
        private int id;
        private String milkNo;
        private String fullName;

        public Member(int id, String milkNo, String fullName) {
            this.id = id;
            this.milkNo = milkNo;
            this.fullName = fullName;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }


        public String getMilkNo() {
            return milkNo;
        }

        public void setMilkNo(String milkNo) {
            this.milkNo = milkNo;
        }

        @Override
        public String toString() {
            return fullName;
        }

    }

}

问题是到目前为止,当选择一个键时我无法获取相应的对象(值)。

最佳答案

获取组合框中的字符串对应的对象值值属性监听器。代码如图所示。

autocompleteCombo.valueProperty().addListener(new ChangeListener() {

    @Override
    public void changed(ObservableValue observable, Object oldValue, Object newValue) {
        Member member = (Member) list.get(newValue);
        System.out.println(member.getId());
        System.out.println(member.getMilkNo());
        System.out.println(member.getFullName());
    }
});

关于java - 与 ObservableMap 绑定(bind)的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045479/

相关文章:

java - 使用 Java 的 PostgreSql 复制配置

java - Rhino 1.7r2-3 E4X "XML"未定义

user-interface - 如何配置node-mysql?

user-interface - 如何摆脱已编译的 Haskell GUI 应用程序的黑色控制台窗口

JavaFX MediaPlayer 循环

java - 将 pdf 文件编码为 JSON 字符串时出错

java - 我已经为 SortedMap 创建了一个 put() 方法,但似乎无法让测试代码正常工作

java - 过渡后背景未正确呈现

java - SceneBuilder 节点不可选择

java - key 释放的最后阶段