从tableview一次打印一个项目的ObservableList <obsevablelist <string>&gt;项目

时间:2016-07-07 18:50:00

标签: java javafx-8

我有一个我映射到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和收藏的新手,我很感激帮助..

神保

1 个答案:

答案 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一起使用。