TableView(javaFX)仅显示空行 [英] TableView (javaFX) is showing only blank lines

查看:485
本文介绍了TableView(javaFX)仅显示空行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 TableView 显示空白行,我缺少什么?



项目链接 - > 。在FXML中,您可以将其定义为

 < TableColumn prefWidth =75.0text =Timestamp> 
< cellValueFactory>
< PropertyValueFactory property =timestamp/>
< / cellValueFactory>
< / TableColumn>

且数据模型类应具有访问者:

  public class MessageDataTableModel 
{

private StringProperty timestampProperty = new SimpleStringProperty();

public void setTimestamp(String timestamp){
this.timestampProperty.set(timestamp);
}

public String getTimestamp(){
return this.timestampProperty.get();
}

public StringProperty timestampProperty(){
return this.timestampProperty;
}
}

请注意,对于返回<$ c $的getter方法c> ObservableValue (上面的timestampProperty())应该具有propertyName +Property,其中propertyName是中的timestamp< PropertyValueFactory property =timestamp/ >


my TableView Is showing blank lines, what am I missing?

project link -> https://github.com/raphaelbgr/SwingSocketClient/tree/database

I am trying to gather information from the database and show it on this list view, the jdbc connection is perfect and working, however the tableView is not displaying the items, I've read 3 times the oracle tutorial but no luck.

public ObservableList<MessageDataTableModel> queryChatHistory(int rowLimit) throws SQLException {
    final ObservableList<MessageDataTableModel> data = FXCollections.observableArrayList();
    String query = "SELECT SERV_REC_TIMESTAMP, OWNERNAME, TEXT FROM MESSAGELOG LIMIT " + rowLimit;

    Statement st = c.createStatement();
    ResultSet rs = st.executeQuery(query);
    while(rs.next()) {
        while(rs.next()) {
            data.add(new MessageDataTableModel(rs.getString(1),rs.getString(2),rs.getString(3)));
        }
    }
    return data;
}       

And this calls the method above:

public void populateHistoryTable(int rowLimit) {
    DAO dao = new DAO();
    try {
        dao.connect();
        table_chathistory.setItems(dao.queryChatHistory(rowLimit));
        dao.disconnect();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

This is the DataModel used, no Idea on what I am missing on it:

private SimpleStringProperty timestamp = new SimpleStringProperty();
private SimpleStringProperty screenname = new SimpleStringProperty();
private SimpleStringProperty message = new SimpleStringProperty();

public MessageDataTableModel() {

}

public MessageDataTableModel(String timestamp, String screenname, String message) {
    this.timestamp = new SimpleStringProperty(timestamp);
    this.screenname = new SimpleStringProperty(screenname);
    this.message = new SimpleStringProperty(message);
}
public void setTimestamp(String timestamp) {
    this.timestamp.set(timestamp);
}
public void setScreenname(String screenname) {
    this.screenname.set(screenname);
}
public void setMessage(String message) {
    this.message.set(message);
}
}

And a blank TableView appears, no idea on what I am missing

解决方案

Your current tableView definition is as follows:

<TableView fx:id="table_chathistory" layoutX="7.0" layoutY="31.0" prefHeight="354.0" prefWidth="602.0">
    <columns>
        <TableColumn prefWidth="75.0" text="Timestamp" />
        <TableColumn prefWidth="85.0" text="Screen Name" />
        <TableColumn prefWidth="441.0" text="Message" />
    </columns>
</TableView>

Here, the tableColumns are missing the cellValueFactory. In FXML you can define it as

<TableColumn prefWidth="75.0" text="Timestamp">
    <cellValueFactory>
        <PropertyValueFactory property="timestamp" />
    </cellValueFactory>
</TableColumn>

and the data model class should have the accessors:

public class MessageDataTableModel
{

    private StringProperty timestampProperty = new SimpleStringProperty();

    public void setTimestamp( String timestamp ) {
        this.timestampProperty.set( timestamp );
    }

    public String getTimestamp() {
        return this.timestampProperty.get();
    }

    public StringProperty timestampProperty() {
        return this.timestampProperty;
    }
}

Note that for getter method that returns ObservableValue (timestampProperty() in the above) should have the propertyName + "Property", where the propertyName is "timestamp" in <PropertyValueFactory property="timestamp" />.

这篇关于TableView(javaFX)仅显示空行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆