我对JavaFX非常缺乏经验:
我加载了我的“游戏”视图,并希望填充一张桌子,玩家可以从他当前的房间转到。我从模型中获取数据,将其添加到列表中,将列表添加到表视图中。这之前工作得很好,但现在我遇到了一个问题:
当我运行代码时,表确实显示了一个元素,但没有显示它的名称。我可以选择它(我猜它可以使用它,我没有实现更多)但是缺少名称String。我尝试使用public class GameViewController implements Printable{
private MainApp mainApp;
private ObservableList<Room> exitList = FXCollections.observableArrayList();
@FXML
private TableView<Room> exitTable;
@FXML
private TableColumn<Room, String>exitNameColumn;
public GameViewController(MainApp mainApp) {
this.mainApp=mainApp;
}
@FXML
public void initialize() {
update();
}
public void update() {
for (Room room: mainApp.getGame().getPlayer().getCurrentRoom().getExitList()) {
exitList.add(room);
}
exitTable.setItems(exitList);
exitNameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
exitTable.getColumns().get(0).setVisible(false);
exitTable.getColumns().get(0).setVisible(true);
}
}
技巧来更新表(这在数据发生变化之前强制刷新之前很有用),但它也没有帮助。
public StringProperty nameProperty() {
return new SimpleStringProperty(name);
}
{{3}}
PS:该属性的返回方法是:
public class Room
{
private String name;
private StringProperty nameProperty;
private boolean visible = false;
private HashMap<String, Room> exits;
public Room(String name)
{
this.name = name;
nameProperty = new SimpleStringProperty(name);
exits = new HashMap<String, Room>();
}
//other methods
public StringProperty nameProperty() {
return nameProperty;
}
public ArrayList<Room> getExitList() {
ArrayList<Room> list = new ArrayList<Room>(exits.values());
return list;
}
}
PPS:Room class(将nameProperty作为字段)
{{1}}