2016-07-15 82 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

非常感謝它解決了我的問題。從下一次開始將負責命名。 –