gpt4 book ai didi

java - TableView内容不显示

转载 作者:行者123 更新时间:2023-12-02 10:47:16 24 4
gpt4 key购买 nike

我有一个表格 View ,其中填充了信息,但是虽然我可以选择保存数据的行,但文本不可见。使用table.getSelectionModel().getSelectedItem();我可以确认表格中确实有元素,但文本没有显示。

我的程序中有一个套接字通信,服务器向客户端发送客户端需要在 TableView 中显示的元素的 ArrayList。

服务器端:

private void acceptedConnection(Socket client, Connection con){
try(ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream())){
System.out.println("receiving request");

String table = ois.readUTF();

System.out.println("Preparing statement");
PreparedStatement getTableContent = con.prepareStatement("SELECT * from " + table);

System.out.println("Fetching results");
ResultSet tableContentRs = getTableContent.executeQuery();

Builder builder = null;

switch (table){
case "blog_user": builder = new UserBuilder();break;
}

assert builder != null;
ArrayList tableContent = builder.buildArrayList(tableContentRs);


System.out.println("Sending results");
oos.writeObject(tableContent);
oos.flush();
System.out.println("Results sent");
}catch (IOException | SQLException e){
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端:

public void loadTableContent(){
try (Socket client = new Socket(InetAddress.getLocalHost(), 667);
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(client.getInputStream())) {

System.out.println("Sending request");
String selectedTable = databaseTableComboBox.getSelectionModel().getSelectedItem();
oos.writeUTF(selectedTable);
oos.flush();

table.getColumns().clear();
table.getItems().clear();

ArrayList data = null;
Builder builder = null;
switch (selectedTable){
case "blog_user": builder = new UserBuilder();data = (ArrayList<User>)ois.readObject();break;
}

assert builder != null;
builder.setColumns(table);
table.getItems().addAll(data);
table.refresh();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}

用户生成器:

public class UserBuilder implements Builder {
@Override
public ArrayList buildArrayList(ResultSet set) throws SQLException {
ArrayList<User> users = new ArrayList<>();
while (set.next()) users.add(new User(set.getInt(1), set.getString(2), set.getString(3)));
return users;
}

@Override
public void setColumns(TableView table) {
TableColumn<User, String> idCol = new TableColumn<>("ID");
TableColumn<User, String> nameCol = new TableColumn<>("Name");
TableColumn<User, String> pwdCol = new TableColumn<>("Passwort");

idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
nameCol.setCellValueFactory(new PropertyValueFactory<>("username"));
pwdCol.setCellValueFactory(new PropertyValueFactory<>("pwd"));

table.getColumns().addAll(idCol, nameCol, pwdCol);
}
}

用户:

public class User implements Serializable{
private int id;
private String username;
private String pwd;

public User(int id, String username, String pwd) {
this.id = id;
this.username = username;
this.pwd = pwd;
}

@Override
public String toString() {
return id + " " + username + " " + pwd;
}
}

有趣的是,它已经工作过一次,但后来我为其他类(例如 Admin 和 AdminBuilder)添加了与 User 和 UserBuilder 相同的机制,突然文本不再显示在 TableView 中。

非常感谢任何和所有帮助。

最佳答案

您的 User 类需要 getter 方法。 PropertyValueFactory 需要访问这些字段。

public class User {
private final int id;
private final String username;
private final String pwd;

public User(int id, String username, String pwd) {
this.id = id;
this.username = username;
this.pwd = pwd;
}

@Override
public String toString() {
return id + " " + username + " " + pwd;
}

public int getId() {
return id;
}

public String getUsername() {
return username;
}

public String getPwd() {
return pwd;
}

}

关于java - TableView内容不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com