一、需求描述
点击按钮,可以弹出文字和图片。
二、程序及结果
程序代码参考:
package com.example.fxtest2;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.ImageCursor;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.Dragboard;
import javafx.scene.input.KeyCode;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.Objects;
public class HelloApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
Label label=new Label("姓名");
label.setVisible(false);
label.setLayoutX(210);
label.setLayoutY(365);
Label label1=new Label("加载进度");
label1.setVisible(false);
label1.setLayoutX(200);
label1.setLayoutY(350);
Button button=new Button("获取姓名及照片");
button.setLayoutY(400);
button.setLayoutX(200);
ImageView imageView=new ImageView();
imageView.setX(100);
imageView.setY(50);
imageView.setFitWidth(300);
imageView.setFitHeight(300);
button.setOnAction(event->{
Thread thread=new Thread(()->{
Image image=new Image("girl.png",true);//放在resources下
//Image image=new Image("https://hbimg.huaban.com/e11062d99c2f43c4c8a2506b43d613a85576739f2ddf2-ghOCM9_fw658",true);//网上来源
image.progressProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, Number newValue) {
int progress=(int)(newValue.doubleValue()*100);
label1.setText("(图片加载了"+progress+"%)");
label1.setVisible(true);
}
});
imageView.setImage(image);
String newValue="林月明";
label.setFont(Font.font("华文隶书", FontWeight.BOLD,25));//设置字体
label.setVisible(true);
Platform.runLater(()->{
label.setText(newValue);
});
});
thread.start();
});
AnchorPane pane=new AnchorPane();
pane.getChildren().addAll(label,button,label1,imageView);
Scene scene=new Scene(pane,500,500);
stage.setScene(scene);
stage.setResizable(false);
stage.setTitle("个人主页");
stage.show();
System.out.println("start()...");
}
@Override
public void init() throws Exception {
super.init();
System.out.println("init()...");//先调用
}
@Override
public void stop() throws Exception {
super.stop();
System.out.println("stop()...");//窗口关闭自动调用
}
public static void main(String[] args) {
launch();
}
}
运行程序,如下图1,点击“获取姓名及图片”按钮时,显示结果如下图2。
三、知识点整理
1、Platform.runLater(),任务放在队列里,在application空闲时执行队列任务;progressProperty(),非手动调用runLater,监听器自己控制运行,不用手动设置。
2、在本地获取图片来源
Image image=new Image("girl.png",true);
3、在网上获取图片来源
图片拉到上面的地址搜索框中,可以获取到图片url。
Image image=new Image("https://hbimg.huaban.com/e11062d99c2f43c4c8a2506b43d613a85576739f2ddf2-ghOCM9_fw658",true);
四、相关链接
1、图片来源(个人学习用,若侵权联系本人删除)
1)
https://hbimg.huaban.com/e11062d99c2f43c4c8a2506b43d613a85576739f2ddf2-ghOCM9_fw658
2)https://www.iconfont.cn/collections/index?spm=a313x.7781069.1998910419.d2b281273&type=2&page=2
2、Java多线程操作https://www.bilibili.com/video/BV1Qf4y1F7Zv?p=13&vd_source=841fee104972680a6cac4dbdbf144b50