Java 日期不显示在TableView中
我在sql server中有6列,其中5列显示在TableView中,6列为日期格式,未显示。显示任何内容都没有错误Java 日期不显示在TableView中,java,sql-server,javafx,Java,Sql Server,Javafx,我在sql server中有6列,其中5列显示在TableView中,6列为日期格式,未显示。显示任何内容都没有错误 public class PTable { String P_total,P_sold,P_correct,P_remaining,P_faulty; LocalDate P_addedDate; public PTable(String P_total,String P_sold,String P_correct,String P_remaining,S
public class PTable {
String P_total,P_sold,P_correct,P_remaining,P_faulty;
LocalDate P_addedDate;
public PTable(String P_total,String P_sold,String P_correct,String P_remaining,String P_faulty,LocalDate P_addedDate){
this.P_total=P_total;
this.P_sold = P_sold;
this.P_correct=P_correct;
this.P_remaining=P_remaining;
this.P_faulty=P_faulty;
this.P_addedDate=P_addedDate;
}
public String getP_total(){
return P_total;
}
public void setP_total(String P_total){
this.P_total=P_total;
}
public String getP_sold(){
return P_sold;
}
public void setP_sold(String P_sold){
this.P_sold=P_sold;
}
public String getP_correct(){
return P_correct;
}
public void setP_correct(String P_correct){
this.P_correct=P_correct;
}
public String getP_remaining(){
return P_remaining;
}
public void setP_remaining(String P_remaining){
this.P_remaining=P_remaining;
}
public String getP_faulty(){
return P_faulty;
}
public void setP_faulty(String P_faulty){
this.P_faulty=P_faulty;
}
public LocalDate getP_addedDate(){
return P_addedDate;
}
public void setP_addedDate(LocalDate P_addedDate){
this.P_addedDate=P_addedDate;
}
}
我的控制器类::
ObservableList<PTable> ob = FXCollections.observableArrayList();
ResultSet rs = conn.createStatement().executeQuery("select * from Products");
while(rs.next()){
ob.add(new PTable(rs.getString("P_total"),rs.getString("P_sold"),rs.getString("P_correct"),rs.getString("P_remaining"),rs.getString("P_faulty"),rs.getDate("P_addedDate").toLocalDate()));
}
TProduct_cln.setCellValueFactory(new PropertyValueFactory<PTable , String>("P_total"));
SProduct_cln.setCellValueFactory(new PropertyValueFactory<PTable , String>("P_sold"));
CProduct_col.setCellValueFactory(new PropertyValueFactory<PTable , String>("P_correct"));
RProduct_cln.setCellValueFactory(new PropertyValueFactory<PTable , String>("P_remaining"));
FProduct_cln.setCellValueFactory(new PropertyValueFactory<PTable , String>("P_faulty"));
date_cln.setCellValueFactory(new PropertyValueFactory<PTable , LocalDate>("P_addedDate"));
tbl_product.setItems(ob);
ObservableList ob=FXCollections.observableAryList();
ResultSet rs=conn.createStatement().executeQuery(“从产品中选择*);
while(rs.next()){
ob.add(新PTable(rs.getString(“P_total”)、rs.getString(“P_selled”)、rs.getString(“P_correct”)、rs.getString(“P_剩余”)、rs.getString(“P_故障”)、rs.getDate(“P_addedate”).toLocalDate());
}
t产品类别setCellValueFactory(新属性价值工厂(“P_total”);
SProduct_cln.setCellValueFactory(新财产价值工厂(“P_出售”));
CProduct_col.setCellValueFactory(新属性值工厂(“P_correct”));
RProduct_cln.setCellValueFactory(新的PropertyValueFactory(“P_剩余”));
FPProduct_cln.setCellValueFactory(新属性ValueFactory(“P_故障”));
日期?cln.setCellValueFactory(新属性值工厂(“P_addedDate”);
tbl_产品设置项(ob);
请帮我做这件事。我已经试了两天,仍然没有找到解决办法。
谢谢我在您的代码中没有看到
CellFactory
。如果是这种情况,请尝试以下方法:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
date_cln.setCellFactory(column -> new TableCell<PTable, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (empty) {
setText("");
} else {
setText(formatter.format(date));
}
}
});
DateTimeFormatter formatter=DateTimeFormatter.of模式(“dd-MM-yyyy”);
日期\u cln.setCellFactory(列->新表单元格(){
@凌驾
受保护的void updateItem(LocalDate,布尔值为空){
super.updateItem(日期,空);
if(空){
setText(“”);
}否则{
setText(formatter.format(date));
}
}
});
问题解决了。我在代码中更改了两件事
首先将LocalDate更改为String。
然后rs.getDate(“P_addedDate”).toLocalDate()将其更改为rs.getDate(“P_addedDate”).toString();
它解决了我的问题,认为它可能会帮助其他人。我不知道它是否解决了您的问题,但由于JDBC 4.2,您应该使用
rs.getObject(“p_addedDate”,LocalDate.class)
。隔离问题。问题是您没有从结果集中获取值,还是tableview没有显示它?请并坚持java命名约定!谢谢你的回复,但问题已经解决了。这不是解决办法,它只是抹黑了一个会再次产生影响的问题。。将所有数据作为字符串是错误的,在表示任何数据类型时做一些合理的事情是celltrue的任务,但是OP应该看到一些东西,即使没有格式化单元格,对不对;)