JavaFXで、FileChooserクラスを使用して、ファイルを選択する方法について考えます。
ファイルを選択と言っても、やっていることはGUIからユーザーが選択したパスを拾ってくるだけなので単純です。
目次
Controller.java
package com.example.demo;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.FileChooser;
import javax.imageio.stream.ImageInputStream;
import java.util.Iterator;
import javax.imageio.ImageReader;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.File;
import java.util.regex.Pattern;
public class Controller {
@FXML
Label label;
String filePath;
@FXML
public void importFile(){
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Import File");
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("imagefile", "*.jpg", "*.png","*.tif")
);
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
File file = fileChooser.showOpenDialog(null);
if(file != null) {
System.out.println(file.getPath());
this.filePath = file.getPath();
label.setText(this.filePath);
}
}
}app1.java
package com.example.demo;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import java.io.IOException;
public class sliderApp extends Application{
@Override
public void start(Stage stage) throws IOException{
Parent root = FXMLLoader.load(getClass().getResource("scene1.fxml"));
stage.setTitle("title");
stage.setScene(new Scene(root,600,400));
stage.show();
}
}
scene1.fxml
ボタンクラスを使用して、インポートボタンを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.image.ImageView?>
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.demo.Controller"
prefHeight="400.0" prefWidth="600.0" >
<Label fx:id="label" GridPane.rowIndex="0" GridPane.columnIndex="0" text="Filename" />
<Button GridPane.rowIndex="1" GridPane.columnIndex="0" onAction="#importFile" text="import" />
<ImageView fx:id="imageView1" fitHeight="105.0" fitWidth="107.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="3" GridPane.rowIndex="2" />
</GridPane>ファイルインポートからtifファイルの展開まで
ボタンからtifファイルをインポートした後、展開するまでを行なってみます。
ImageExtractクラス
ファイル展開ようのクラスを作成します。
package com.example.demo;
import javax.imageio.stream.ImageInputStream;
import java.util.Iterator;
import javax.imageio.ImageReader;
import javax.imageio.ImageIO;
import java.io.File;
public class ImageExtract {
public String filePath;
public int numImage;
public ImageExtract(String filePath,String outPath){
this.filePath = filePath;
this.numImage = 0;
try{
ImageInputStream iis = ImageIO.createImageInputStream(new File(filePath));
if (iis == null || iis.length() == 0){
}
Iterator<ImageReader> iterator = ImageIO.getImageReaders(iis);
if (iterator == null || !iterator.hasNext()) {
System.out.println("Image file format not supported by ImageIO: " + filePath);
}
ImageReader reader = (ImageReader) iterator.next();
iterator = null;
reader.setInput(iis);
this.numImage = reader.getNumImages(true);
for (int i = 0; i < reader.getNumImages(true); i++) {
ImageIO.write(reader.read(i), "tif", new File(outPath + i + ".tif"));
System.out.println(outPath + i + ".tif -> successfully saved." );
}
} catch (Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
// ImageExtract imr = new ImageExtract("img1.tif", "");
}
}app1.java
上記のクラスに、取得したパスを適用してファイル取得と同時に展開します。
import java.util.regex.Pattern;
public class Controller {
@FXML
Label label;
String filePath;
@FXML
public void importFile(){
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Import File");
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("imagefile", "*.jpg", "*.png","*.tif")
);
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
File file = fileChooser.showOpenDialog(null);
if(file != null) {
System.out.println(file.getPath());
this.filePath = file.getPath();
label.setText(this.filePath);
ImageExtract imx = new ImageExtract(this.filePath,"src/main/resources/com/example/demo/");
}
}
}

