每当我点击桌面视图的一行时,我想在窗口(在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();
}
}
提前感谢所有帮助我的人。
答案 0 :(得分:3)
由于您想对所选项目的更改作出反应,您可以在selectedIndex
的选择模型中为TableView
属性添加一个监听器:
Table1.getSelectionModel().selectedIndexProperty().addListener((observable, oldValue, newValue) -> plot());
而不是使用自定义行工厂。