Javafx 如何声明tableview的日期值属性

Javafx 如何声明tableview的日期值属性,javafx,Javafx,我需要将date属性传递给setCellValueFactory,这是我的Persona类的seter和geter的代码,正确的方法是什么,我想我对正确的声明有一个问题,所以我需要一个真正的方向,我需要在java.sql.date类中声明一些日期,做一些参考?有什么想法吗?。请帮我一点忙 package application; import java.time.LocalDate; import javafx.beans.property.IntegerProperty; impo

我需要将date属性传递给setCellValueFactory,这是我的
Persona类的seter和geter的代码,正确的方法是什么,我想我对正确的声明有一个问题,所以我需要一个真正的方向,我需要在java.sql.date类中声明一些日期,做一些参考?有什么想法吗?。请帮我一点忙

   package application;


import java.time.LocalDate;

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Persona {



    private StringProperty nombres;
    private StringProperty apellidos;
    private IntegerProperty id_cliente;
    private ObjectProperty <LocalDate>fechacliente;

public Persona (   String nombres, String apellidos, Integer id_cliente, Object fechacliente) {
    this.nombres=  new SimpleStringProperty (nombres);
    this.apellidos= new SimpleStringProperty ( apellidos);
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
    this.fechacliente= new SimpleObjectProperty<LocalDate>();
}


public Object getFecha() {
    return fechacliente.get();
}

public void setFecha(Object fechacliente) {
    this.fechacliente=new SimpleObjectProperty<>();

}

public String getNombres() {
    return nombres.get();
}

public  void  setNombres(String nombres) {
    this.nombres=new SimpleStringProperty (nombres);
}


public String getApellidos() {
    return apellidos.get();
}

public  void  setApellidos(String apellidos) {
    this.apellidos=new SimpleStringProperty ( apellidos);
}


public Integer getId_cliente() {
    return id_cliente.get();
}

public  void  setid_cliente(Integer id_cliente) {
    this.id_cliente=new SimpleIntegerProperty (id_cliente);
}

}
这是我用来在tableview中检索数据的方法,但日期不显示

public void seleccionaregistros() {
    ObservableList <Persona> data =FXCollections.observableArrayList();
      Connection conn=null;{
          try {

             conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=prueba", "sa", "milkas87");
              Statement mostrar=conn.createStatement();
              ResultSet rs;
              rs= mostrar.executeQuery("select * from cliente");


              while ( rs.next() ) 
              {
                 data.add(new Persona(

                         rs.getString("nombre"),
                         rs.getString("apellido"),
                         rs.getInt("id"),
                         rs.getDate(4)
                         ));
                 tablacliente.setItems(data);
              }

          } catch (SQLException e) {
              e.printStackTrace();
          }

     }

}

您错误地使用了JavaFX属性。JavaFXbean的属性需要getter、setter(如果可写)和属性getter。另外,setter不应该每次都创建一个新属性;它应该设置现有属性的值

为了简化您的示例,如果我们有一个
Person
和一个属性
name
,它将如下所示:

public class Person {

    private final StringProperty name = new SimpleStringProperty(this, "name");

    public Person(String name) {
        setName(name);
    }

    public final void setName(String name) { // setter
        this.name.set(name);
    }

    public final String getName() { // getter
        return name.get();
    }

    public final StringProperty nameProperty() { // property getter
        return name;
    }

} 
注意:如果需要,您仍然可以在构造函数中而不是在字段声明中初始化属性

要在
TableView
TreeTableView
中使用
name
属性,只需在
cellValueFactory中返回它即可。使用
表视图的示例

TableView<Person> table = new TableView<>();

TableColumn<Person, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().nameProperty());
table.getColumns().add(nameCol);
注意:最好使用
java.time
类之一(例如
LocalDate
OffsetDateTime
,等等)

同样,要将其添加到
表视图中,它看起来如下所示:

TableView<Person> table = new TableView<>();

TableColumn<Person, Date> clientDateCol= new TableColumn<>("Client Date");
clientDateCol.setCellValueFactory(features -> features.getValue().clientDateProperty());
table.getColumns().add(clientDateCol);
TableView table=newtableview();
TableColumn clientDateCol=新的TableColumn(“客户日期”);
clientDateCol.setCellValueFactory(功能->功能.getValue().clientDateProperty());
table.getColumns().add(clientDateCol);

与您的问题无关:请学习java命名约定并遵守它们(嗯……您的问题中没有被建议这样做吗;)可能重复您为什么不阅读答案?很完美。我这么做了,但是当我发送日期值时,tableview是empy,如何获得正确的格式?我想是的that@JhonMark您的问题将添加一个演示该问题的。
TableView<Person> table = new TableView<>();

TableColumn<Person, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().nameProperty());
table.getColumns().add(nameCol);
public class Person {

    private final ObjectProperty<Date> clientDate = new SimpleObjectProperty<>(this, "clientDate");

    public final void setClientDate(Date clientDate) {
        this.clientDate.set(clientDate);
    }

    public final Date getClientDate() {
        return clientDate.get();
    }

    public final ObjectProperty<Date> clientDateProperty() {
        return clientDate;
    }

}
TableView<Person> table = new TableView<>();

TableColumn<Person, Date> clientDateCol= new TableColumn<>("Client Date");
clientDateCol.setCellValueFactory(features -> features.getValue().clientDateProperty());
table.getColumns().add(clientDateCol);