我在使用JavaFX在TableView中刪除數據時遇到了一些問題。 TabeView從一個靜態的ObservableList中接收它的數據。JavaFX TableView刪除問題
問題:TableView一次顯示6行。當有在我ObservableList例如6個數據對象和我刪除它們的1,TableView中似乎有一些更新的問題:
正如你可以看到,紅色突出顯示的行似乎是我的ObservableList中的 中仍然存在的值的副本。您無法選擇此行,因爲ObservableList中當然不存在 值。這種行爲一直刪除一些值之後出現:
所有亮點「行」是不可選擇的原因在我ObservableList沒有相應的值。只有在刪除TableView中的最後一個值/行後,它纔會刷新並變爲空。
我ObservableList IST靜態
public static ObservableList<ImageData> datas_all;
缺失是非常簡單的
@FXML
private TableView<ImageData> imageTable;
...
@FXML
private void handleDeleteImage()
{
ImageData img_data = imageTable.getSelectionModel().getSelectedItem();
Main.datas_all.remove(img_data);
//if(Main.datas_flickr.contains(img_data))
// Main.datas_flickr.remove(img_data);
//Main.db_adapter.deleteImage(new Integer[]{img_data.getKey()});
//File del_file = new File(img_data.getPath());
//del_file.delete();
}
TableView中包括由
@FXML
private TableColumn<ImageData,Image> columnImage;
@FXML
private TableColumn<ImageData,String> columnName;
...
public void redefineTableView()
{
columnImage.setCellFactory(new Callback<TableColumn<ImageData, Image>, TableCell<ImageData, Image>>()
{
@Override
public TableCell<ImageData, Image> call(TableColumn<ImageData, Image> param)
{
final ImageView imgView = new ImageView();
imgView.setFitHeight(100);
imgView.setFitWidth(100);
TableCell<ImageData, Image> cell = new TableCell<ImageData, Image>()
{
public void updateItem(Image image, boolean empty)
{
if(image != null)
imgView.setImage(image);
}
};
cell.setGraphic(imgView);
return cell;
}
});
columnName.setCellFactory(new Callback<TableColumn<ImageData, String>, TableCell<ImageData, String>>()
{
@Override
public TableCell<ImageData, String> call(TableColumn<ImageData, String> param)
{
TableCell<ImageData, String> cell = new TableCell<ImageData, String>()
{
private Text text;
public void updateItem(String string, boolean empty)
{
super.updateItem(string, empty);
if (!isEmpty())
{
text = new Text(string);
text.setWrappingWidth(170);
setGraphic(text);
}
}
};
return cell;
}
});
columnName.setCellValueFactory(new PropertyValueFactory<ImageData, String>("name"));
columnImage.setCellValueFactory(new PropertyValueFactory<ImageData, Image>("image"));
imageTable.setItems(Main.datas_all);
}
定義的兩排的我GOOGLE了這個問題,但其他人似乎擁有它。 請幫幫我! =)
謝謝老兄。現在很明顯:D。順便說一句,它可能是「其他{imgView.setImage(圖像); setGraphic(imageView);}」並在列columnName中做同樣的事情。 =) – 2014-08-27 16:56:57