Столбец JavaFX tableview переключает значения - PullRequest
0 голосов
/ 21 октября 2018

это снова я.поэтому у меня есть этот javafx 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! ");
    }
}

Я также прикрепил класс модели, ну ... на всякий случай.обратите внимание на соглашения об именах для методов Property, я должен был использовать это, потому что это были точные имена в моей базе данных.и так как PropertyValueFactory использует Reflection.

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();
}

Вот изображение.обратите внимание на различные значения в HIRE_DATE COLUMN И ADDRESS COLUMN screenshot

...