【问题标题】:JavaFX button background imageJavaFX 按钮背景图片
【发布时间】:2015-07-11 03:06:11
【问题描述】:

我在 JavaFX 的按钮上设置 backgroundImage 时遇到问题。

Image newGame = new Image("File:/CSS/nova_hra.png");
BackgroundImage newGameBgr = new BackgroundImage(newGame, null, null, null, null);

Button buttonNewGame = new Button("Nová Hra");
Button buttonLoadGame = new Button("Načíst Hru");
Button buttonStatistics = new Button("Statistiky");
Button buttonExit = new Button("Konec");

buttonNewGame.setGraphic(new ImageView(newGame));
//buttonNewGame.setBackground(new Background(newGameBgr));

buttonExit.setMinHeight(40);
buttonLoadGame.setMinHeight(40);
buttonNewGame.setMinHeight(40);
buttonStatistics.setMinHeight(40);

buttonExit.setMinWidth(120);
buttonLoadGame.setMinWidth(120);
buttonNewGame.setMinWidth(120);
buttonStatistics.setMinWidth(120);

这对 buttonNewGame 没有任何作用。每次我尝试用这个加载图像时

Image image = new Image(getClass().getResourceAsStream("a.png"));

我得到了运行时异常。当我使用

Image image = new Image(getClass().getResourceAsStream("a.png"));

整个图像消失了。

【问题讨论】:

  • 这两个Image构造函数有什么区别吗?相对于你的班级,你的图片在哪里?
  • 我有资源文件夹,里面是 CSS 文件夹,里面是图片。所以绝对路径是 D:/workspace/mazeGame/resources/CSS/nova_hra.png。而我的失败,应该有当我使用 buttonNewGame.setBackground(new Background(newGameBgr));整个图像消失了。
  • 因为getClass().getResourceAsStream() 加载了相对于您当前类的资源。 getClass().getClassLoader().getResourceAsStream() 加载相对于您的类路径根的资源。所以您可能只是使用了错误的路径,您是否验证过您的流!= null?
  • 当我使用 Image newGame = new Image("File:/CSS/nova_hra.png");图像已加载。我不确定如何验证流!= null。每次我尝试将图像作为流加载时,我都会遇到 runtimeException。

标签: image button background javafx


【解决方案1】:

你可以通过 CSS 来实现。如果您的 background.jpg 在包测试中,只需执行以下操作:

    package testing;

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.Pane;
    import javafx.stage.Stage;

    public class Main extends Application {

        @Override
        public void start(Stage primaryStage) {

            try {

                Pane root = new Pane();

                Button button = new Button( "Click me!");
                button.setStyle("-fx-background-image: url('/testing/background.jpg')");

                root.getChildren().add(button);

                Scene scene = new Scene(root, 800, 400);
                primaryStage.setScene(scene);
                primaryStage.show();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

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

如果你不想使用 css,你可以这样做:

        BackgroundImage backgroundImage = new BackgroundImage( new Image( getClass().getResource("/testing/background.jpg").toExternalForm()), BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, BackgroundSize.DEFAULT);
        Background background = new Background(backgroundImage);

        Button button = new Button( "Click me!");
        button.setBackground(background);

【讨论】:

  • 哦,谢谢,我将图像从资源文件夹移动到包中,然后使用 CSS kode,它可以工作 - 非常感谢 :)
猜你喜欢
  • 2013-03-05
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多