JavaFX中的Tablerow选择

时间:2016-12-09 09:44:08

标签: javafx tableview tablerow

每当我点击桌面视图的一行时,我想在窗口(在javafx中)更新图像。
该表的类型为<PopulateTable>;以下是此类的代码:

public class PopulateTable {

    private final SimpleIntegerProperty count;
    private final SimpleStringProperty name;
    private final SimpleStringProperty date;

    public PopulateTable( int count, String name, String date) {
        super();
        this.count = new SimpleIntegerProperty(count);
        this.name = new SimpleStringProperty(name);
        this.date = new SimpleStringProperty(date);
    }

问题是当我选择一行时应该启动一个需要文件类型作为参数的方法(我正确地存储在一个数组中: final List <file> files = new ArrayList <> ();)。 我在这里发现了这个提示但不是fuziona我...你认为我错在哪里?

这是我找到的方法:

public void printWaveForm(){ 
    Table1.setRowFactory( tv -> {
        TableRow<PopulateTable> row = new TableRow<>();
        row.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
                if(event.getClickCount()>=1) {
                    try {
                        plot();
                    } catch (java.lang.Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        return row;
        });
    }

在这里,表格的行应该一旦选择就开始的方法:

public void plot(){
    lineChart.getData().clear();
    xAxis = new NumberAxis();
    yAxis = new NumberAxis();;
    File file = files.get(Table1.getSelectionModel().getSelectedIndex());
    try {
        AudioWaveformCreator.start(file);
        extractedData = Waveform.points();
        XYChart.Series<Number,Number> series = new XYChart.Series<Number,Number>();
        for(int i =0; i<extractedData.size(); i++){
            series.getData().add(new XYChart.Data<Number, Number>(i,extractedData.get(i)));
        }
        lineChart.getData().add(series);
    } catch (java.lang.Exception e) {
        e.printStackTrace();
    }
}

提前感谢所有帮助我的人。

1 个答案:

答案 0 :(得分:3)

由于您想对所选项目的更改作出反应,您可以在selectedIndex的选择模型中为TableView属性添加一个监听器:

Table1.getSelectionModel().selectedIndexProperty().addListener((observable, oldValue, newValue) -> plot());

而不是使用自定义行工厂。