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.