JavaFX 可以在场景图形上显示标准图像文件格式。
加载标准图像文件格式JavaFX提供javafx.scene.image.Image API。Image类有很多很容易的构造函数,以便于不同的加载策略,如下面的列表所示:
Image(java.io.InputStream inputStream)
Image(java.io.InputStream is, double requestedWidth, double requestedHeight, boolean preserveRatio, boolean smooth)
Image(java.lang.String url)
Image(java.lang.String url, boolean backgroundLoading)
Image(java.lang.String url, double requestedWidth, double requestedHeight, boolean preserveRatio, boolean smooth)
Image(java.lang.String url, double requestedWidth, double requestedHeight, boolean preserveRatio, boolean smooth, boolean backgroundLoading)
以下代码加载两个图像,一个来自本地磁盘,另一个来自网络。
import java.io.File;
import java.net.MalformedURLException;
import javafx.application.Application;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
File file = new File("C:/Users/abc/myphoto.jpg");
String localUrl = file.toURI().toURL().toString();
Image localImage = new Image(localUrl, false);
String remoteUrl = "/attachments/jimg/Firefox.png";
Image remoteImage = new Image(remoteUrl, true);
System.out.println(localUrl);
System.out.println(remoteUrl);
} catch (MalformedURLException ex) {
// error
}
}
public static void main(String[] args) {
launch(args);
}
}
ImageView对象是一个可以显示图像的JavaFX Node对象。它可以有效果,执行变换和缩放图像。
当ImageView节点应用特殊效果(如图像模糊)时,图像的像素数据被复制,计算并显示在ImageView节点上。
下面代码显示如何创建ImageView对象。
Image image = new Image(url, true);
ImageView imageView = new ImageView(image);
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Title");
Group root = new Group();
Scene scene = new Scene(root, 600, 330, Color.WHITE);
GridPane gridpane = new GridPane();
gridpane.setPadding(new Insets(5));
gridpane.setHgap(10);
gridpane.setVgap(10);
final ImageView imv = new ImageView();
final Image image2 = new Image(Main.class.getResourceAsStream("button.png"));
imv.setImage(image2);
final HBox pictureRegion = new HBox();
pictureRegion.getChildren().add(imv);
gridpane.add(pictureRegion, 1, 1);
root.getChildren().add(gridpane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
stage.setTitle("HTML");
stage.setWidth(500);
stage.setHeight(500);
Scene scene = new Scene(new Group());
VBox root = new VBox();
final ImageView selectedImage = new ImageView();
Image image1 = new Image(Main.class.getResourceAsStream("a.jpg"));
selectedImage.setImage(image1);
selectedImage.setRotate(90);
root.getChildren().addAll(selectedImage);
scene.setRoot(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Title");
Group root = new Group();
Scene scene = new Scene(root, 600, 330, Color.WHITE);
GridPane gridpane = new GridPane();
gridpane.setPadding(new Insets(5));
gridpane.setHgap(10);
gridpane.setVgap(10);
final ImageView imv = new ImageView();
imv.setFitWidth(100);
final Image image2 = new Image(Main.class.getResourceAsStream("button.png"));
imv.setImage(image2);
final HBox pictureRegion = new HBox();
pictureRegion.getChildren().add(imv);
gridpane.add(pictureRegion, 1, 1);
root.getChildren().add(gridpane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Title");
Group root = new Group();
Scene scene = new Scene(root, 600, 330, Color.WHITE);
GridPane gridpane = new GridPane();
gridpane.setPadding(new Insets(5));
gridpane.setHgap(10);
gridpane.setVgap(10);
final ImageView imv = new ImageView();
imv.setPreserveRatio(true);
final Image image2 = new Image(Main.class.getResourceAsStream("button.png"));
imv.setImage(image2);
final HBox pictureRegion = new HBox();
pictureRegion.getChildren().add(imv);
gridpane.add(pictureRegion, 1, 1);
root.getChildren().add(gridpane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.ScrollEvent;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
ImageView imageView = new ImageView();
ScrollPane scrollPane = new ScrollPane();
DoubleProperty zoomProperty = new SimpleDoubleProperty(200);
zoomProperty.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable arg0) {
imageView.setFitWidth(zoomProperty.get() * 2);
imageView.setFitHeight(zoomProperty.get() * 3);
}
});
scrollPane.addEventFilter(ScrollEvent.ANY, new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent event) {
if (event.getDeltaY() > 0) {
zoomProperty.set(zoomProperty.get() * 1.2);
} else if (event.getDeltaY() < 0) {
zoomProperty.set(zoomProperty.get() / 1.1);
}
}
});
imageView.setImage(new Image("http://yourImageURL"));
imageView.preserveRatioProperty().set(true);
scrollPane.setContent(imageView);
stage.setScene(new Scene(scrollPane, 400, 300));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}