【问题标题】:javaFX - tableview getting selected itemsjavaFX - 获取选定项目的表格视图
【发布时间】:2016-01-31 17:19:36
【问题描述】:

如何使用 Sqlite 数据库从 javaFX 中的 tableview 中连续获取选定项。

我现在正在使用它来获取行的索引:

(...)

@FXML
    private ObservableList<UserData> data;

@FXML
    private TableView table;

@FXML
    private void pressTableAction() {
        System.out.println("Selected index: " +table.getSelectionModel().getSelectedIndex());
    }

(...)

 public void initialize (URL url, ResourceBundle rb) {
        try {
            con = DataBaseConnection.getConnected();
            stat = con.createStatement();
            data = FXCollections.observableArrayList();
            ResultSet rs = con.createStatement().executeQuery("SELECT * FROM person");
            while (rs.next()) {
                data.add(new UserData(rs.getInt("p_id"), rs.getString("Name")));
            }
            column1.setCellValueFactory(new PropertyValueFactory("p_id"));
            column2.setCellValueFactory(new PropertyValueFactory("Name"));
            table.setItems(null);
            table.setItems(data);

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error on Building Data");
        }






Public static class UserData {

        private IntegerProperty p_id;
        private StringProperty Name;


        private UserData(Integer p_id, String Name) {
            this.p_id = new SimpleIntegerProperty (p_id);
            this.Name = new SimpleStringProperty(Name);

        }

        public IntegerProperty p_idProperty() {
            return p_id;
        }

        public StringProperty NameProperty() {
            return Name;
        }
}

我的数据库如下所示:

CREATE TABLE person (p_id INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR(30) NOT NULL);

如何获取我点击的行的 p_id 或名称?

@FXML
    private void pressTableAction() {
    System.out.println("Selected index: " + table.getSelectionModel().getSelectedIndex());
    System.out.println("Selected p_id: " + ????)
    }

【问题讨论】:

    标签: database sqlite javafx tableview scenebuilder


    【解决方案1】:

    首先,不要为您的表格和表格列使用原始类型。您的 IDE 应该为此生成大量警告。所以你应该这样做

    @FXML
    TableView<UserData> table ;
    

    而不是您拥有的声明。同样,列应该用适当的类型声明。

    如果你的模型类UserData遵循标准的JavaFX properties pattern,它将有一个getP_id()方法,你可以这样做

    UserData selected = table.getSelectionModel().getSelectedItem();
    System.out.println("Selected p_id: "+selected.getP_id());
    

    【讨论】:

    • 您好,谢谢,但它不起作用:( ****在第一行我收到消息= 不兼容的类型:对象无法转换为 UserData。***第二行(.getP_id) = 找不到符号。位置:选择 UserData 类型的变量这是我第一次使用 Javafx/sqlite.. 很抱歉提出愚蠢的问题。
    • 查看更新。您需要修复您的表声明。我假设(从您的单元格值工厂)您的 UserData 类有一个 getP_id() 方法。
    • 阅读答案中的tutorial I linked。您应该只拥有与该属性对应的 getset 方法。
    • @James_D 我想获得多个选定的项目。所以我使用了'ObservableList productSelected = table.getSelectionModel().getSelectedItems();'但是,如何从这个 observablelist 中检索单元格数据?你能帮帮我吗?
    • 好的,确实缺少 get/set 方法。它现在正在工作。谢谢
    猜你喜欢
    • 2016-08-04
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多