javafx tableview列开关值

c6ubokkw  于 2021-06-19  发布在  Mysql
关注(0)|答案(0)|浏览(253)

又是我。所以我有一个javafx表视图,它是用数据库中的行和列动态加载的。结果很好,但我意识到了一些事情。tableview中的两个特定列交换它们的值。它发生了一次,当我取消了进程,再次运行程序,它没有发生,然后走出忧郁,它再次发生。我附上了一张照片以便你能更好地理解。谢谢你们!!
下面是用数据库中的列和行填充tableview的代码。我运行这个时没有任何错误。

public void buildData () {

    String str = "SELECT * FROM EMPLOYEE_TABLE";

    data = FXCollections.observableArrayList();
    try {
        ResultSet rs = DBaseUtils.dbaseExecuteQuery(str);

        for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
            String columnName = rs.getMetaData().getColumnName(i + 1);
            TableColumn<Employee, String> column = new TableColumn<>(columnName);
            column.setCellValueFactory(new PropertyValueFactory<>(columnName));
            column.setCellFactory(TextFieldTableCell.<Employee>forTableColumn());
            column.setOnEditCommit(new EventHandler<>() {
                @Override
                public void handle(TableColumn.CellEditEvent<Employee, String> event) {
                    TableColumn<Employee, String> col = event.getTableColumn();
                    int row = event.getTablePosition().getRow();
                    ObservableValue<String> observe = col.getCellObservableValue(row);
                    if (observe instanceof WritableValue) {
                        ((WritableValue<String>) observe).setValue(event.getNewValue());
                    }
                }
            });
            empTable.getColumns().addAll(column);
        }

        while(rs.next()) {
            Employee emp = new Employee();
            emp.setEmployeeId(rs.getString(1));
            emp.setFirstname(rs.getString(2));
            emp.setLastname(rs.getString(3));
            emp.setSex(rs.getString(4));
            emp.setEmail(rs.getString(5));
            emp.setPhoneNumber(rs.getString(6));
            emp.setAddress(rs.getString(7));
            emp.setHireDate(rs.getString(8));
            emp.setState(rs.getString(9));
            emp.setSalary(rs.getString(10));
            emp.setDepartment(rs.getString(11));
            emp.setSsn(rs.getString(12));

            data.add(emp);
        }
        empTable.setItems(data);
        empTable.setEditable(true);

    } catch(Exception e) {
        e.printStackTrace();
        System.out.println("Error building data! ");
    }
}

我还附上了模特课,嗯。。。以防万一。注意属性方法的命名约定,我不得不使用它,因为它们是我数据库中的确切名称。因为它的属性值工厂使用反射。

public  class Employee {
private SimpleStringProperty employeeId;
private SimpleStringProperty firstname;
private SimpleStringProperty lastname;
private SimpleStringProperty sex;
private SimpleStringProperty email;
private SimpleStringProperty phoneNumber;
private SimpleStringProperty hireDate;
private SimpleStringProperty address;
private SimpleStringProperty state;
private StringProperty salary;
private SimpleStringProperty department;
private SimpleStringProperty ssn;
private long time;

public Employee() {
    this.employeeId = new SimpleStringProperty();
    this.firstname = new SimpleStringProperty();
    this.lastname = new SimpleStringProperty();
    this.sex = new SimpleStringProperty();
    this.email = new SimpleStringProperty();
    this.phoneNumber = new SimpleStringProperty();
    this.hireDate = new SimpleStringProperty();
    this.address = new SimpleStringProperty();
    this.state = new SimpleStringProperty();
    this.salary = new SimpleStringProperty();
    this.department = new SimpleStringProperty();
    this.ssn = new SimpleStringProperty();
}

public String getEmployeeId() {
    return employeeId.get();
}

public void setEmployeeId(String id) {
    this.employeeId.set(id);
}

public StringProperty EMPLOYEE_IDProperty() {
    return employeeId;
}

public String getFirstName() {
    return firstname.get();
}

public void setFirstname(String firstname) {
    this.firstname.set(firstname);
}

public StringProperty FIRST_NAMEProperty() {
    return firstname;
}

public String getLastName() { return lastname.get(); }

public void setLastname(String lastname) {
    this.lastname.set(lastname);
}

public StringProperty LAST_NAMEProperty() {
    return lastname;
}

public String getSex() {
    return sex.get();
}

public void setSex(String sex) {
    this.sex.set(sex);
}

public StringProperty SEXProperty() {
    return sex;
}

public String getEmail() {
    return email.get();
}

public void setEmail(String email) {
    this.email.set(email);
}

public StringProperty EMAILProperty() {
    return email;
}

public String getPhoneNumber() {
    return phoneNumber.get();
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber.set(phoneNumber);
}

public StringProperty PHONE_NUMBERProperty() {
    return phoneNumber;
}

public String getHireDate() {
    return hireDate.get();
}

public void setHireDate(String date) {
    this.hireDate.set(date);
}

public SimpleStringProperty HIRE_DATEProperty() {
    return hireDate;
}

public String getAddress() {
    return address.get();
}

public void setAddress(String address) {
    this.address.set(address);
}

public StringProperty ADDRESSProperty() {
    return address;
}

public String getState() {
    return state.get();
}

这是图像。请注意“雇用日期”列和“地址”列中的不同值

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题