Javaのデスクトップアプリケーション開発の学習(7) - ImageViewのジャーパッケージと画像ファイルを設定するには、FXMLを読まれます

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");
    }

}

おすすめ

転載: www.cnblogs.com/kexing/p/10990571.html