JavaFX отображать фоновое изображение сцены


Я разрабатываю приложение JavaFX на Eclipse Kepler, используя встроенную библиотеку FX из Java SDK1. 7. 0_45. Я хочу отобразить фоновое изображение в сцене. Следуя учебнику, приведенному в документации Java, следующий код должен работать:

public class Main extends Application {
    public static void main(String[] args) {
    Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
    GridPane grid = new GridPane();
    Scene scene = new Scene(grid, 300, 275);
    primaryStage.setScene(scene);
    scene.getStylesheets().add(Main.class.getResource("Login.css").toExternalForm());
    primaryStage.show();
    }

}

Мой CSV-файл выглядит так:

.root {
 -fx-background-image: url("background.jpg");

}

Но вместо этого я просто получаю пустой экран. У меня есть 3 файла в папке src / application: background.jpg, Главная.java и логин.CSS.

Я пробовал добавление обратной косой черты, помещение изображения в отдельную папку, предоставление абсолютного пути, предоставление нескольких типов изображений, использование ../ приложение / фон.jpg, изменение кода в файл: фон.jpg, предоставляя URL-адрес непосредственно в код и отклоняя CSS-файл, используя вместо этого imageview ..... но ничего не получается.

Я взглянул на несколько других ссылок stackoverflow, все, казалось, потерпели неудачу:

Странная вещь, когда я предоставляю изображение с сервера в виде гиперссылки, все работает нормально. Однако указание пути к локальному файлу никогда не работает. Что я делаю не так? Может кто-нибудь показать мне, как отобразить локальное изображение? Это что, жучок?

4 2

4 ответа:

Это прекрасно сработало для меня с a .единственное заметное отличие, которое я имел в отличие от вас, состояло в том, что я разделил их .css-файл и мой фон.png в субпакет основного. Пример:

Моя структура каталогов выглядит следующим образом:

sotestproject ----|
                  |
                  |---package sotestProject ---SOTestProject.java
                                    |
                                    |
                                    |
                                    |
                               package sotestProject.style
                                           |
                                           |---Login.css
                                           |
                                           |---background.png

Используя эту разбивку, следующие файлы с кодом успешно создали фон с изображением:

SoTestProject.java:

package sotestproject;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

/**
 *
 * @author William
 */
public class SOTestProject extends Application {

    @Override
    public void start(Stage primaryStage) {
            GridPane grid = new GridPane();
            Scene scene = new Scene(grid, 300, 275);
            primaryStage.setScene(scene);
            scene.getStylesheets().add(SOTestProject.class.getResource("style/Login.css").toExternalForm());
            primaryStage.show();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Вход.css:

.root {
    -fx-background-image: url("background.png");
}

А затем, очевидно, Мое прошлое.ПНГ в том же каталоге, что и сам .файл CSS. Главное "изменение" в коде состоит в том, чтобы отметить, что с помощью scene.getStyleSheet() я использовал ссылку на style/ вместо просто ресурса.

Надеюсь, это поможет!

Одна вещь, чтобы отметить: я компиляции на 32-разрядной версии JDK 7.0_45. Это не должно иметь никакого значения, но это так.

Отчасти благодаря ответу от WillBD я решил отказаться от Eclipse Kepler и начать все заново в Netbeans. Я использовал тот же самый код, что и в своем вопросе, и теперь все работает просто отлично. Я думаю, что это ошибка между JavaFX и Eclipse Kepler.

Файл изображения должен находиться в каталоге ' bin / application 'и добавить определения css в' src/application/filename.css '

У меня была такая же проблема в NetBeans, и я перепробовал практически все. В конце концов, я обнаружил, что расширение файла " jpg "было написано заглавными буквами в этом" окне иерархии проектов " на левой стороне NetBeans.

Я изменил эту часть моего кода на все заглавные буквы, и tadaaa все работало просто отлично.