1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import java.io.File;
import java.io.FilenameFilter;
import javafx.application.Application;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableColumnBuilder;
import javafx.scene.control.TableView;
import javafx.scene.control.TableViewBuilder;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.ImageViewBuilder;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;
/**
*
* @author fabriceb
*/
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
TableColumn<File, Image> imageColumn = TableColumnBuilder.<File, Image>create().text("Image").build();
imageColumn.setCellValueFactory(new Callback<CellDataFeatures<File, Image>, ObservableValue<Image>>() {
@Override
public ObservableValue<Image> call(CellDataFeatures<File, Image> p) {
File file = p.getValue();
return new SimpleObjectProperty<>(new Image(file.toURI().toString(), 100, 100, true, true, true));
}
});
imageColumn.setCellFactory(new Callback<TableColumn<File, Image>, TableCell<File, Image>>(){
@Override
public TableCell<File, Image> call(TableColumn<File, Image> p) {
return new TableCell<File, Image>(){
@Override
protected void updateItem(Image i, boolean empty) {
super.updateItem(i, empty);
setText(null);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
ImageView imageView = (i == null || empty) ? null : ImageViewBuilder.create().image(i).build();
setGraphic(imageView);
}
};
}
});
//
TableColumn<File, String> pathColumn = TableColumnBuilder.<File, String>create().text("Path").build();
pathColumn.setCellValueFactory(new Callback<CellDataFeatures<File, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<File, String> p) {
File file = p.getValue();
return new SimpleStringProperty(file.getAbsolutePath());
}
});
//
TableView<File> tableView = TableViewBuilder.<File>create().columns(imageColumn, pathColumn).columnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY).build();
//
String path = "C:\\fabriceb\\Dessin";
File folder = new File(path);
File[] files = folder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png") || name.endsWith(".gif");
}
});
if (files != null) {
for (File file : files) {
tableView.getItems().add(file);
}
}
//
StackPane root = new StackPane();
root.getChildren().add(tableView);
Scene scene = new Scene(root, 500, 500);
primaryStage.setTitle("Test TableView Image");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* The main() method is ignored in correctly deployed JavaFX
* application. main() serves only as fallback in case the
* application can not be launched through deployment artifacts,
* e.g., in IDEs with limited FX support. NetBeans ignores main().
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
} |
Partager