Java TableView内容未显示
我有一个用信息填充的表视图,但是虽然我可以选择保存数据的行,但文本不可见。使用Java TableView内容未显示,java,sockets,javafx,tableview,Java,Sockets,Javafx,Tableview,我有一个用信息填充的表视图,但是虽然我可以选择保存数据的行,但文本不可见。使用table.getSelectionModel().getSelectedItem()我可以确认表中确实包含元素,但文本没有显示 我的程序中有一个套接字通信,其中服务器向客户端发送客户端需要在TableView中显示的元素的ArrayList 服务器端: private void acceptedConnection(Socket client, Connection con){ try(ObjectInput
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();
}
}
有趣的是,它已经工作了一次,但后来我添加了与其他类(例如Admin和AdminBuilder)的User和UserBuilder相同的机制,突然文本不再显示在TableView中
非常感谢所有帮助。您的用户类需要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;
}
}
谢谢你,成功了。我以前删除过我的getter,因为我认为我不需要它们。
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;
}
}
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;
}
}