JavaFX 按钮背景图像

JavaFX button background image

我在 JavaFX 的按钮上设置背景图像时遇到问题。

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

整个图像消失。

您可以通过 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);