我有一个我映射到tableView的Board模型。我可以打印出整个选择,但我试图用特殊格式打印选择中的每一行。 这是模型
public class Board (String pieceno, String avge, String lpte, String lptloc, String grade) {
String PcNo;
String AvgE;
String LptE;
String LptLoc;
String Grade;
public Board( {
this.PcNo = pieceno;
this.AvgE = avge;
this.LptE = lpte;
this.LptLoc = lptloc;
this.Grade = grade;
}
public String getPcNo() {
return PcNo;
}
public void setPcNo(String pcno) {
PcNo = pcno;
}
pubic String getAvgE() {
return AvgE;
}
public void setAvgE(String avge) {
AvgE = avge;
}
public String getLptE() {
return LptE;
}
public void setLptE(String lpte) {
LptE = lpte;
}
public String getLptLoc() {
return LptLoc;
}
public void setLptLoc(String lptloc) {
LptLoc = lptloc;
}
public String getGrade() {
return Grade;
}
public void setGrade(String gr) {
Grade = gr;
}
@Override
public String toString() {
return getPcNo() + "," + getAvgE() + "," + getLptE()
+ "," + getLptLoc() + "," + getGrade() + "\n";
}
}
现在这里是tableView的代码和多行的选择。
TableView tableView = new TableView();
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
TableColumn pcNoCol = new TableColumn();
pcNoCol.setText("pcNo");
pcNoCol.setCellValueFactory(new PropertyValueFactory("pcNo"));
tableView.getColumns().add(pcNoCol);
TableColumn avgECol = new TableColumn();
avgECol.setText("avgE");
avgECol.setCellValueFactory(new PropertyValueFactory("avgE"));
tableView.getColumns().add(avgECol);
TableColumn lptECol = new TableColumn();
lptECol.setText("lptE");
lptECol.setCellValueFactory(new PropertyValueFactory("lptE"));
tableView.getColumns().add(lptECol);
TableColumn lptLocCol = new TableColumn();
lptLocCol.setText("lptLoc");
lptLocCol.setCellValueFactory(new PropertyValueFactory("lptLoc"));
tableView.getColumns().add(lptLocCol);
TableColumn gradeCol = new TableColumn();
gradeCol.setText("grade");
gradeCol.setCellValueFactory(new PropertyValueFactory("grade"));
tableView.getColumns().add(gradeCol);
//Bindings.
p.progressProperty().bind(service.progressProperty());
veil.visibleProperty().bind(service.runningProperty());
p.visibleProperty().bind(service.runningProperty());
tableView.itemsProperty().bind(service.valueProperty());
现在抓取行并打印出选定项目的鼠标事件是
tableView.setOnMousePressed((MouseEvent event) -> {
ObservableList<ObservableList<String>>selectedItems = tableView.getSelectionModel().getSelectedItems();
//selectedItems.forEach(selecteditem -> System.out.println(selecteditem));
System.out.println(selectedItems);
});
代码有效,但我想打印出每个选定的项目,而不是println(selectedItems),我尝试在foreach行上方注释掉的行。但是我收到以下错误。
Executing /home/jimbo/NetBeanProjects/AccountFXFrontEnd/dist/run12421/AccountFXFrontEnd.jar usring platform /usr/java/jdk1.8.0_91/jre/bin/java
Exception in thread"JavaFX Application Thread" java.lang.ClassCastException: accountfxfrontend model Board cannot be cast to javafx.collections.ObservableList
at java.lang.Iterable.forEach Iterable.java.75
有人可以告诉我,为了打印出每件商品而不是收藏品,我需要做些什么吗?谢谢。
我应该很明显我是javafx和收藏的新手,我很感激帮助..
神保
答案 0 :(得分:0)
您应该开始使用类型参数,例如TableView<Board>
。这将有助于避免这种错误。所以,这个:
tableView.getSelectionModel().getSelectedItems();
返回ObservableList<Board>
,而不是ObservableList<ObservableList<String>>
。因此在使用forEach
时会出现异常,因为它会尝试将Board
转换为ObservableList
。你没有使用System.out.println(selectedItems)
获得它,因为在这种情况下没有类型转换,println
只能与Object
一起使用。顺便说一句,如果您使用:
ObservableList selectedItems = tableView.getSelectionModel().getSelectedItems();
它也适用于forEach
,因为它将再次与Object
一起使用。