JavaFX 응용 프로그램 아이콘


172

JavaFX를 사용하여 응용 프로그램 아이콘을 변경할 수 있습니까? 아니면 Swing을 사용하여 수행해야합니까?

답변:


234

스테이지가 "스테이지"이고 파일이 파일 시스템에 있다고 가정합니다.

stage.getIcons().add(new Image("file:icon.png"));

아래 주석에 따라 포함 된 항아리에 싸여 있으면 대신 다음 방법을 사용해야합니다.

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));

5
또한 아이콘을 응용 프로그램 바로 가기로 설치하고 WebStart를 배포 기술로 사용하는 경우 jnlp 파일에서 적절한 아이콘 / 바로 가기 / 데스크톱 설정을 설정하십시오 ( docs.oracle.com/javase/7). / docs / technotes / guides / javaws /…
jewelsea

9
크기가 다른 여러 이미지를 추가 할 수 있으며 JavaFX가 가장 적합한 이미지를 선택합니다. 작업 표시 줄의 크기와 제목 표시 줄의 크기가 다르기 때문입니다.
drzymala

11
파일이 파일 시스템에있을 때만 작동한다고 생각합니다. 아이콘이 jar 파일과 클래스 경로에 래핑되는 일반적인 상황에서는 이것이 작동하지 않습니다. stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));작품 을 사용하는 다른 솔루션 중 하나입니다 .
k_o_

3
적어도 우분투 (유니티)에서는 아이콘이 창 장식에만 사용되지만 발사기에 사용되지는 마십시오. 못생긴 물음표 대신 아이콘을 표시하려면 적절한 .dektop파일 을 지정해야 합니다. 여기
dzim

1
제목 표시 줄의 아이콘 즉, 창의 왼쪽 상단 만 변경됩니다. 바탕 화면에 응용 프로그램의 아이콘을 바로 가기로 변경하는 방법은 무엇입니까? 작업 표시 줄에?
TejpalBh

74

나는 이것을 시도했고 그것은 완전히 작동한다. 코드는 다음과 같습니다

stage.getIcons().add(
   new Image(
      <yourclassname>.class.getResourceAsStream( "icon.png" ))); 

icon.png는 소스 파일과 같은 폴더에 있습니다.


3
'<yourclassname> .class'는 'getClass ()'로 대체 될 수 있음
Jim Fred

71

초보자를위한 전체 프로그램 :)이 프로그램은 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 스크린 샷

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

여기에 이미지 설명을 입력하십시오

도움이 되길 바랍니다. 감사!!


이것이 svg를 지원합니까?
qed

1
@ qed, SVG가 지원되지 않는다고 생각하지만 100 % 확실하지는 않습니다. 테스트 할 수 있습니다.
Madan Sapkota

방금 JavaFX 응용 프로그램 아이콘에 .svg 파일을 사용해 보았습니다. 그것은 작동하지 않았다. 오류는 없었지만 JavaFX는 사용자 정의 로고 대신 기본 로고를 사용했습니다.
Simon Diemert


7

이미지 폴더가 있고 그 안에 아이콘이 저장되어 있다면

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

2
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));

icon.png가 resources 디렉토리에 있고 '/'를 놓는 것을 기억하면 그렇지 않으면 작동하지 않습니다.


2

src 디렉토리에 새로운 패키지, 즉 image.icons를 만들고 .png 이미지로 옮기는 것에 대해 어떻게 생각하십니까? 작성해야 할 것보다 :

Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);

이 솔루션은 완벽하게 작동하지만 여전히 올바른지 확실하지 않습니다 (여기부터 시작).


Java 패키지에 자원을 배치하는 것은 좋지 않습니다. resources폴더 에 넣는 것이 좋습니다 .
Thibstars

1
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));

이 방법을 사용하여 크기가 다른 아이콘을 두 개 이상 추가 할 수 있습니다. 이미지는 동일한 이미지의 크기가 달라야하며 최상의 크기가 선택됩니다. eg. 16x16, 32,32


1
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));

이미지 폴더는 리소스 폴더에 있어야합니다.


4
다른 답변에서 이미 동일하게 설명 했으므로이 답변은 완전히 필요하지 않습니다.
L. Guthardt

1

이 코드 라인을 사용하여 응용 프로그램에 아이콘을 쉽게 넣을 수 있습니다

stage.getIcons (). add (new Image ( "이미지 경로"));



0

내 응용 프로그램에서 이것을 사용했습니다.

Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);

여기 창은 무대입니다.


0

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>

바로 가기 및 작업 표시 줄에 아이콘이 추가됩니다.


0

런타임시 아이콘 토글 :

여기의 응답 외에도 처음으로 응용 프로그램에 아이콘을 할당하면 스테이지에 새 아이콘을 추가하여 아이콘을 전환 할 수 없습니다 (이는 아이콘을 전환 해야하는 경우 유용합니다) 온 / 오프 활성화 / 비활성화에서 응용 프로그램).

런타임 동안 새 아이콘을 설정하려면 새 아이콘을 추가하기 전에 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")));
    }
}

-1

당신이있어 경우 Invalid URL or resource not found작업 공간에서 "빈"폴더에 icon.png를 넣어.


-2

JavaFX의 제목 표시 줄에 고유 한 아이콘을 삽입하는 또 다른 쉬운 방법은 다음 방법을 사용하여 이미지를 기본 스테이지에 추가하는 것입니다.

Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);

import javafx.scene.image.Image를 확인하십시오 (netbeans와 같은 IDE를 사용하는 경우 자동으로 수행되어야 함).


40
되지 않는다는 것을 정확히 위에 무엇을 게시되었습니다?
XXL

-2

나는 이것을 시도하고 작동합니다 :

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));

실제로, .. 아니오 : 리소스 조회에서 점이 지원되지 않습니다. api 문서를 읽으십시오
kleopatra
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.