ImageViewの画像
ImageViewののJavaFXのは、画像プロパティを介して直接設定することはできません設定、コードだけで設定できます
ImageViewの画像
まず第一に、我々は、javaファイルを、対応するコントローラFXMLを実装してみましょうInitializable
インタフェースを、そして私たちのImageViewの画像のインターフェース複製のinitializeメソッドに設定されている
私の絵はIMGフォルダにある
後、前FXMLと同じ、あなたは変更する必要がありpom.xml
、または無視されたフォルダのすべての内容を置くのimg Mavenは、あなたは画像ファイルを見つけることができません
@Override
public void initialize(URL location, ResourceBundle resources) {
//设置图片,inPathImg是ImageView
Image image = new Image(getClass().getResource("img/file.png").toString());
inPathImg.setImage(image);
}
拡張、パッケージングツールPathUtil
上記が成功した画像を設定し、それぞれがまたトラブルを書いたので、私はすぐに画像を取得するために、クラスをカプセル化しています
/**
* 获得图片文件,
* @param o 当前的class,传入this即可
* @param fileName 图片名+扩展名
* @return 图片image
*/
public static Image getImg(Object o, String fileName) {
URL res = o.getClass().getResource("img");
if (fileName.contains(".")) {
String temp = res.toString() + "/" + fileName;
return new Image(temp);
}
return null;
}
そのようなAを使用する場合
@Override
public void initialize(URL location, ResourceBundle resources) {
//设置图片
inPathImg.setImage(PathUtil.getImg(this, "file.png"));
outPathImg.setImage(PathUtil.getImg(this, "file.png"));
}
拡張ツールは、FXMLファイルパスを取得しました
テストは問題ありませんが、ときに、プロジェクトは、JARパッケージとしてパッケージされている場合はもともと、開封後はエラーになります。
詳細については、オンライン検索、元のjarパッケージには、このクラスを直接ファイルに使用することはできません、ファイル内のjarパッケージを使用するために、方法はIOストリームを使用する必要があります
/**
* 获得fxml文件路径
* @param o class文件,传入this
* @param fileName 文件名
* @return
*/
public static URL getFxmlPath(Object o,String fileName) {
return o.getClass().getResource("fxml/"+fileName+".fxml");
}
/**
* 获得文件
* @param Object o this
* @param String fileName 文件名
*/
public static InputStream getFxmlFile(Object o,String fileName) {
return o.getClass().getResourceAsStream("fxml/"+fileName+".fxml");
}
内部のメインの呼び出し
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(); // 创建对象
loader.setBuilderFactory(new JavaFXBuilderFactory()); // 设置BuilderFactory
loader.setLocation(PathUtil.getFxmlPath(this, "scene_main"));//获得fxml的路径
InputStream inputStream = PathUtil.getFxmlFile(this, "scene_main");//加载jar包中的fxml文件
Object o = loader.load(inputStream);
//这是之前使用的方式,使用的是FXMLLoader的静态方法,如果使用jar包的方式,则会报错
//Parent root = FXMLLoader.load(PathUtil.getFxmlPath(this,"scene_main"));
Parent root = (Parent) o;
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
PathUtilソース
package wan.Utils;
import java.io.InputStream;
import java.net.URL;
import javafx.scene.image.Image;
/**
* @author StarsOne
* @date Create in 2019/6/5 0005 14:01
* @description
*/
public class PathUtil {
/**
* 获得图片文件,
* @param o 当前的class,传入this即可
* @param fileName 图片名+扩展名
* @return 图片image
*/
public static Image getImg(Object o, String fileName) {
URL res = o.getClass().getResource("img");
if (fileName.contains(".")) {
String temp = res.toString() + "/" + fileName;
return new Image(temp);
}
return null;
}
/**
* 获得fxml文件路径
* @param o class文件,传入this
* @param fileName 文件名
* @return
*/
public static URL getFxmlPath(Object o,String fileName) {
return o.getClass().getResource("fxml/"+fileName+".fxml");
}
public static InputStream getFxmlFile(Object o,String fileName) {
return o.getClass().getResourceAsStream("fxml/"+fileName+".fxml");
}
}