2013-11-20 5 views
7

Я хотел знать, как установить значки на этапе javaFX. Я нашел этот метод, но он не работал должным образом.Установить значок на сцене в JavaFX

stage.getIcons().add(new Image(iconImagePath)); 

этапом является экземпляром javafx.stage.Stage, и я импортированы javafx.scene.image.Image. Это исключение, которое мы получаем:

Неверный URL: Неверный URL или ресурс не найден

Кроме того, нет ничего плохого в iconImagePath, его значение «G: /test.jpg» и там является файлом jpg в диске G с именем test. Кроме того, когда мы используем ImageIO для чтения того же URL-адреса, мы можем сделать это легко.

+0

'G:/test.jpg' не является URL-адресом, что, если вы попытаетесь с файлом:/G:/test.jpg'? – mavroprovato

+1

Связанный: http://stackoverflow.com/questions/10121991/javafx-2-application-icon/10122335#10122335 – berry120

ответ

1

использование

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

и поставить logo.png изображения в корневом каталоге вашего проекта (в том же каталоге, где ЦСИ)

+0

Большое спасибо, используя этот метод, исключение не будет выбрано, но значок изображения сцены не изменился !! – Siavash

+0

попробуйте очистить проект и построить его снова не только. –

+0

Можете ли вы опубликовать свою структуру каталогов ..? – subash

4

Конструкторы javafx.scene.image.Image ожидают URI, а не (полный) путь. Этот URI может быть либо относительным (например, /images/flower.png), либо абсолютным (например, file:flower.png).

Строки, такие как G:/test.jpg, не являются допустимыми URL-адресами и, следовательно, являются незаконными.

Попробуйте вместо file:g:/test.jpg.

Обычно значки должны быть в комплекте с приложением, так просто поместите файл изображения в вашем пути к классам (например, если вы используете затмение, поместите его в каталог «Src») и использовать его так:

stage.getIcons().add(new Image("/logo.jpg")); 
+0

Большое спасибо, используя этот метод, исключение не будет выбрано, но значок изображения сцены не изменился !! – Siavash

+0

У вас нет никакого исключения, это означает, что изображение можно найти и загрузить. Вы должны увидеть его в области обрезки вашего окна, панели задач Windows и списка задач, если вы нажмете Alt + Tab. – isnot2bad

13
stage.getIcons().add(new Image(getClass().getResourceAsStream("bal.png"))); 

Этот пример работает. Я поместил значок в ту же папку/пакет, что и исходный .java-файл.

Структура каталогов

+0

Большое спасибо, используя этот метод, исключение не будет выбрано, но значок изображения сцены не изменился !! – Siavash

+0

мой ответ обновлен. он работает ... – subash

+0

Еще раз спасибо, но он не работает с этим путем: file: images/pic.jpeg – Siavash

0

Это то, что я сделал, и это работает. Изображение находится в корневой папке моего ресурса.

stage.getIcons().add(new Image("/ubuntu-mini.png")); 

Я использую JavaFX 8

-1

Решение:

File f = new File("image.png"); 
Image ix = new Image(f.toURI().toString()); 
stage.getIcons().add(ix); 
1

не забывайте, что ваша иконка должна быть в резолюции 32x32 или 16x16, если нет, то он не работает ,

3

Лучший способ:

stage.getIcons().add(new Image(getClass().getResource(IconImagePath).toExternalForm())); 
+0

Это немного немного. Пожалуйста, объясните, почему это решение является «лучшим способом», особенно когда есть много других ответов, которые уже были опубликованы. – APC

+0

Это решение было единственным, что работало для меня. – Maxincredible52

1

Вот рабочий код, который является именно то, что вы neened.

   import javafx.application.Application; 
       import javafx.event.ActionEvent; 
       import javafx.event.EventHandler; 
       import javafx.scene.Scene; 
       import javafx.scene.control.Button; 
       import javafx.scene.image.Image; 
       import javafx.scene.layout.StackPane; 
       import javafx.stage.Stage; 

       /** 
       * 
       * @author Manikant gautam 
       * This is a beginner's sample application 
       * using JAVAFX 
       * 
       */ 
     public class Helloworld extends Application { 

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button(); 
    btn.setText("Say 'Hello World'"); 
    btn.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      System.out.println("Hello World!"); 
     } 
    }); 

    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 

    Scene scene = new Scene(root, 300, 250); 
    // Set Icon From Here. 
    primaryStage.getIcons().add(
      new Image("/resource/graphics/app_logo.png")); 
    primaryStage.setTitle("Hello World!"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 


public static void main(String[] args) { 
    launch(args); 
} 

}

// набор иконок постановкой

 primaryStage.getIcons().add(
     new Image("/resource/graphics/app_logo.png")); 
+0

Я думал, что это поможет с помощью примера. Вместо того, чтобы вводить один строковый код. –

1
// Set the icon 
stage.getIcons().add(new Image(getClass().getResourceAsStream("penguin.png"))); 

я столкнулся с той же проблемой. Я использовал Netbeans. Я не уверен, что структура папки отличается для других IDE, но мне пришлось поместить изображение в/build/classes/(пакет, содержащий файл класса JavaFX). Это означает, что он не входит в папку src.

-1
public class Main extends Application 
{ 
    private static final Logger LOGGER = Logger.getLogger(Main.class); 

    @Override 
    public void start(Stage primaryStage) 
     { 
      try 
       { 
        // BorderPane root = new BorderPane(); 
        BorderPane root = (BorderPane) FXMLLoader 
          .load(getClass().getResource("/org/geeksynergy/view/layout/FrontPageBorder.fxml")); 
        root.setAccessibleText("good"); 

        Scene scene = new Scene(root, 400, 400); 
        scene.getStylesheets().add(getClass() 
          .getResource("/org/geeksynergy/view/cssstyle/application.css").toExternalForm()); 
        primaryStage.setScene(scene); 
        primaryStage.setTitle("AiRJuke"); 
        primaryStage.getIcons().add(new Image("/org/geeksymergy/resource/images/download.png")); 
        primaryStage.show(); 
        AnchorPane personOverview = (AnchorPane) FXMLLoader 
          .load(getClass().getResource("/org/geeksynergy/view/layout/Ui.fxml")); 

        root.setCenter(personOverview); 

        // added this line to save the playlist , when we close 
        // application window 
        Platform.setImplicitExit(false); 

        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() 
         { 
          public void handle(WindowEvent event) 
           { 
            M3UPlayList.defaultSavePlaylist(); 
            Platform.setImplicitExit(true); 
            primaryStage.hide(); 
           } 
         }); 

       } catch (Exception e) 
       { 

        LOGGER.error("Exception while loding application", e); 
       } 
     } 

    public static void main(String[] args) 
     { 
      launch(args); 
     } 
} 
-1

Я использую NetBeans 8.2, если я использую: stage.getIcons() addAll (новое изображение (GetClass() getResourceAsStream ("дом-icon32.png")).);.

Мне нужно поместить изображение в каталог src. Не знаю почему, но работает только так. Я попытался поместить его в build/classes, но отрицательный.