javaFX - 获取所选项目的tableview

时间:2016-01-31 17:19:36

标签: database sqlite javafx tableview scenebuilder

如何从带有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: " + ????)
    }

1 个答案:

答案 0 :(得分:0)

首先,使用表格和表格列的原始类型。您的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());