답변:
스테이지가 "스테이지"이고 파일이 파일 시스템에 있다고 가정합니다.
stage.getIcons().add(new Image("file:icon.png"));
아래 주석에 따라 포함 된 항아리에 싸여 있으면 대신 다음 방법을 사용해야합니다.
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
작품 을 사용하는 다른 솔루션 중 하나입니다 .
나는 이것을 시도했고 그것은 완전히 작동한다. 코드는 다음과 같습니다
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png는 소스 파일과 같은 폴더에 있습니다.
초보자를위한 전체 프로그램 :)이 프로그램은 StackOverflowIcon의 아이콘을 설정합니다.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class StackoverflowIcon extends Application {
@Override
public void start(Stage stage) {
StackPane root = new StackPane();
// set icon
stage.getIcons().add(new Image("/path/to/stackoverflow.jpg"));
stage.setTitle("Wow!! Stackoverflow Icon");
stage.setScene(new Scene(root, 300, 250));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
출력 Screnshot
JavaFX 8 용으로 업데이트
코드를 변경할 필요가 없습니다. 여전히 잘 작동합니다. Java 1.8 (1.8.0_45)에서 테스트 및 검증되었습니다. 경로는 로컬 또는 원격으로 설정 될 수 있으며 둘 다 지원됩니다.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
또는
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
도움이 되길 바랍니다. 감사!!
이미지 폴더가 있고 그 안에 아이콘이 저장되어 있다면
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
패키지에서 직접 사용하는 경우 좋은 습관이 아닙니다.
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
폴더 구조가 있고 그 안에 아이콘이있는 경우
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
icon.png가 resources 디렉토리에 있고 '/'를 놓는 것을 기억하면 그렇지 않으면 작동하지 않습니다.
src 디렉토리에 새로운 패키지, 즉 image.icons를 만들고 .png 이미지로 옮기는 것에 대해 어떻게 생각하십니까? 작성해야 할 것보다 :
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
이 솔루션은 완벽하게 작동하지만 여전히 올바른지 확실하지 않습니다 (여기부터 시작).
resources
폴더 에 넣는 것이 좋습니다 .
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
이미지 폴더는 리소스 폴더에 있어야합니다.
이 코드 라인을 사용하여 응용 프로그램에 아이콘을 쉽게 넣을 수 있습니다
stage.getIcons (). add (new Image ( "이미지 경로"));
stage.getIcons().add(new Image("/images/logo_only.png"));
src 폴더에 이미지 폴더를 만들어 이미지를 가져 오는 것이 좋습니다.
jar 파일을 실행하면 Michael Berry에서 지정한 코드가 제목 표시 줄과 작업 표시 줄의 아이콘을 변경합니다. 바로 가기 아이콘은 변경할 수 없습니다.
com.zenjava로 컴파일 된 기본 프로그램을 실행하는 경우 프로그램 아이콘에 대한 링크를 추가해야합니다.
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
...
<bundleArguments>
<icon>${project.basedir}/src/main/resources/images/filename.ico</icon>
</bundleArguments>
</configuration>
</plugin>
바로 가기 및 작업 표시 줄에 아이콘이 추가됩니다.
런타임시 아이콘 토글 :
여기의 응답 외에도 처음으로 응용 프로그램에 아이콘을 할당하면 스테이지에 새 아이콘을 추가하여 아이콘을 전환 할 수 없습니다 (이는 아이콘을 전환 해야하는 경우 유용합니다) 온 / 오프 활성화 / 비활성화에서 응용 프로그램).
런타임 동안 새 아이콘을 설정하려면 새 아이콘을 추가하기 전에 getIcons (). remove (0)을 사용하십시오. 여기서 0은 대체하려는 아이콘의 색인은 다음과 같습니다.
//Setting icon by first time (You can do this on your start method).
stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));
//Overriding app icon with a new status (This can be in another method)
stage.getIcons().remove(0);
stage.getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));
다른 메소드 또는 클래스에서 스테이지에 액세스하려면 기본 클래스에서 스테이지에 대한 새 정적 필드를 작성할 수 있으므로 앱의 어느 곳에서나 액세스 할 수있는 정적 메소드에 캡슐화하여 start () 메소드에서 액세스 할 수 있습니다. .
public class MainApp extends Application {
private static Stage stage;
public static Stage getStage() { return stage; }
@Override public void start(Stage primaryStage) {
stage = primaryStage
stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));
}
}
public class AnotherClass {
public void setStageTitle(String newTitle) {
MainApp.getStage().setTitle(newTitle);
MainApp.getStage().getIcons().remove(0);
MainApp.getStage().getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));
}
}