2016-07-15 106 views
-2

我的表格视图无法显示数据。它在控制台中显示结果集数据,但无法在tableview javafx中显示。请帮忙。javafx Tableview不显示数据库中的数据

类RoomDetails

package application; 

public class RoomDetails<object> { 

    rmlist rmList = new rmlist(); 
    getroom getRoom = new getroom(); 

    @FXML 
    private Button btnRoom_add; 
    @FXML 
    private Button btnRoom_update; 
    @FXML 
    private Button btnRoom_del; 
    @FXML 
    private TableView<ListRoom> tblroomdetails; 
    @FXML 
    private TableColumn<object, Object> tblroomno; 
    @FXML 
    private TableColumn<object, Object> tblroomtype; 
    @FXML 
    private TableColumn<object, Object> tblac; 
    @FXML 
    private TableColumn<object, Object> tbltariff; 
    @FXML 
    private TableColumn<object, Object> tblstatus; 
    @FXML 
    private Label lblRoomdetails; 


    Dbconnection dbcon = new Dbconnection(); 
    Connection con; 
    PreparedStatement pst; 
    ResultSet rs; 

    @FXML 
    public void btnRoom_addonAction(ActionEvent event) throws IOException{ 
     FXMLLoader fXMLLoader = new FXMLLoader(); 
     fXMLLoader.setLocation(getClass().getResource("/application/AddRoom.fxml")); 
     try{ 

    fXMLLoader.load(); 
      Parent parent = fXMLLoader.getRoot(); 
      Scene scene = new Scene(parent); 
      scene.setFill(new Color(0, 0, 0, 0)); 
      AddRoom addRoom = fXMLLoader.getController(); 
      addRoom.lbl_Add_Room.setText("ADD Room"); 
      Stage stage = new Stage(); 
      stage.setScene(scene); 
      stage.initModality(Modality.APPLICATION_MODAL); 
      stage.initStyle(StageStyle.TRANSPARENT); 
      stage.show(); 

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

    public void viewDetails() { 
     tblroomdetails.setItems(rmList.roomlist); 
     getRoom.rmview(rmList); 
     tblroomno.setCellValueFactory(new PropertyValueFactory<>("roomno")); 
     tblroomtype.setCellValueFactory(new PropertyValueFactory<>("rmtype")); 
     tblac.setCellValueFactory(new PropertyValueFactory<>("acstat")); 
     tbltariff.setCellValueFactory(new PropertyValueFactory<>("rmtariff")); 
     tblstatus.setCellValueFactory(new PropertyValueFactory<>("rmstatus")); 

}  
} 

类getroom

package application; 

public class getroom { 


    Dbconnection dbcon = new Dbconnection(); 
    Connection con; 
    PreparedStatement pst; 
    ResultSet rs; 

    public void rmview(rmlist rmList) { 
     con = dbcon.geConnection(); 
     try{ 
      pst = con.prepareStatement("select * from room"); 
      rs = pst.executeQuery(); 
      System.out.println(rs); 
      while (rs.next()){ 
       rmList.roomno = rs.getString(1); 
       rmList.rmtype = rs.getString(2); 
       rmList.acstat = rs.getString(3); 
       rmList.rmtariff = rs.getString(4); 
       rmList.rmstatus = rs.getString(5); 
       } 
       rs.close(); 
       pst.close(); 
       con.close(); 

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

类ListRoom

package application; 

public class ListRoom { 

    public String roomno; 
    public String rmtype; 
    public String acstat; 
    public String rmtariff; 
    public String rmstatus; 
    public ListRoom(String roomno, String rmtype, String acstat, String rmtariff, String rmstatus) { 
     super(); 
     this.roomno = roomno; 
     this.rmtype = rmtype; 
     this.acstat = acstat; 
     this.rmtariff = rmtariff; 
     this.rmstatus = rmstatus; 
    } 
    public String getRoomno() { 
     return roomno; 
    } 
    public void setRoomno(String roomno) { 
     this.roomno = roomno; 
    } 
    public String getRmtype() { 
     return rmtype; 
    } 
    public void setRmtype(String rmtype) { 
     this.rmtype = rmtype; 
    } 
    public String getAcstat() { 
     return acstat; 
    } 
    public void setAcstat(String acstat) { 
     this.acstat = acstat; 
    } 
    public String getRmtariff() { 
     return rmtariff; 
    } 
    public void setRmtariff(String rmtariff) { 
     this.rmtariff = rmtariff; 
    } 
    public String getRmstatus() { 
     return rmstatus; 
    } 
    public void setRmstatus(String rmstatus) { 
     this.rmstatus = rmstatus; 
    } 


} 

类rmlist

package application; 

public class rmlist { 

    public String roomno; 
    public String rmtype; 
    public String acstat; 
    public String rmtariff; 
    public String rmstatus; 
public ObservableList<ListRoom> roomlist = FXCollections.observableArrayList(); 

} 

类DBConnection的

package application; 

class DBconnection{ 
     public Connection con; 
     String username = "root"; 
     String password = "123456"; 
     String driverclass = "com.mysql.jdbc.Driver"; 
     String db_url = "jdbc:mysql://localhost:3306/"; 
     String unicode= "?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"; 

     public Connection mkDataBase() throws SQLException{ 
       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        con = DriverManager.getConnection(db_url, username, password); 

       } catch (Exception e){ 

       } 
       return con; 
      } 

      public Connection geConnection(){ 

       try { 
        Class.forName("com.mysql.jdbc.Driver"); 
        con = DriverManager.getConnection(db_url+"hotel"+unicode, username, password); 

       } catch (ClassNotFoundException | SQLException ex) { 
        System.out.println("Too Many Connection"); 
       } 

       return con; 
      } 
     } 
+0

什么是'Dbconnection'? –

+0

@James_D这可能是缺少的类定义:)) – NwDev

+3

我永远不会明白为什么需要帮助的人不能花时间确定他们的问题是否合理。 –

回答

1

getRoom.rmview方法您填写一次又一次地分配rmview实例的领域,但你永远不修改rmviewroomlist绝不会被修改;它仍然是空的。由于您在TableView中使用roomlist,因此没有要显示的数据。

而应该添加新元素的每一行数据库查询返回:

// remove data previously in the list 
rmList.roomlist.clear(); 

while (rs.next()){ 
    rmList.roomlist.add(new ListRoom(rs.getString(1), 
            rs.getString(2), 
            rs.getString(3), 
            rs.getString(4), 
            rs.getString(5))); 
} 

此外,我建议您遵守the naming conventions。尤其是关于abreviations的部分,因为这会让你的代码难以阅读。此外object是一个不好的选择作为类型参数的名称。它会导致混淆,并且通常使用单个大写字母作为类型参数。

此外rmlist类的目的还不清楚。它包含与ListRoom相同的字段,但也包含您希望数据实际存储的列表。你为什么需要这些领域?你需要rmlist还是只需要用ObservableList<ListRoom>替换?

+0

非常感谢它解决了我的问题。从下一次开始将负责命名。 –