我想知道如何在javaFX舞台上设置图标。 我找到了这种方法,但它无法正常工作。
stage.getIcons().add(new Image(iconImagePath));
stage是javafx.stage.Stage的一个实例,我导入了javafx.scene.image.Image。 这是我们收到的例外情况:
网址无效:找不到无效的网址或资源
此外,iconImagePath没有任何问题,其值为“G:/test.jpg” 并且G驱动器中有一个名为test的jpg文件。此外,当我们使用ImageIO读取相同的URL时,我们可以轻松完成。
答案 0 :(得分:15)
stage.getIcons().add(new Image(getClass().getResourceAsStream("bal.png")));
此示例有效。我在与.java源文件相同的文件夹/包中放置了一个图标。
目录结构
答案 1 :(得分:4)
javafx.scene.image.Image
的构造函数需要URI,而不是(完整)路径。此URI可以是相对的(例如/images/flower.png
)或绝对的(例如file:flower.png
)。
G:/test.jpg
之类的字符串不是有效的网址,因此非法。
请尝试file:g:/test.jpg
。
通常,图标应该与您的应用程序捆绑在一起,因此只需将图像文件放入类路径中(例如,如果您正在使用eclipse,将其放入'src'目录中)并使用它:
stage.getIcons().add(new Image("/logo.jpg"));
答案 2 :(得分:2)
最佳方式:
stage.getIcons().add(new Image(getClass().getResource(IconImagePath).toExternalForm()));
答案 3 :(得分:1)
使用
stage.getIcons().add(new Image(("file:logo.png")));
并将image logo.png放在项目的根目录中(在src的同一目录下)
答案 4 :(得分:1)
不要忘记您的图标必须是32x32
或16x16
分辨率,否则,它不起作用。
答案 5 :(得分:1)
这是工作代码,正是您所需要的:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
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"));
答案 6 :(得分:1)
// Set the icon
stage.getIcons().add(new Image(getClass().getResourceAsStream("penguin.png")));
我遇到了同样的问题。我用过Netbeans。我不确定其他IDE的文件夹结构是否不同,但我必须将图片放在/ build / classes /(包含JavaFX类文件的包)中。这意味着它不会进入src文件夹。
答案 7 :(得分:1)
答案 8 :(得分:0)
这就是我所做的并且有效。该图像位于我的资源文件夹的根目录中。
stage.getIcons().add(new Image("/ubuntu-mini.png"));
我正在使用JavaFX 8
答案 9 :(得分:-1)
解决方案是:
File f = new File("image.png");
Image ix = new Image(f.toURI().toString());
stage.getIcons().add(ix);
答案 10 :(得分:-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);
}
}
答案 11 :(得分:-1)
我使用netbeans 8.2,如果我使用: stage.getIcons()。addAll(new Image(getClass()。getResourceAsStream(“home-icon32.png”)));
我必须将图像放在src目录中。不知道为什么,但只是这样工作。我已经尝试将它放在构建/类中,但是否定。