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, все, казалось, потерпели неудачу:
- JavaFX Как установить фоновое изображение сцены (рендеры a пустой экран)
- установка фонового изображения с помощью кода javafx (не css) исключение)
- не удается загрузить изображение в JavaFX
- и многое другое.
Странная вещь, когда я предоставляю изображение с сервера в виде гиперссылки, все работает нормально. Однако указание пути к локальному файлу никогда не работает. Что я делаю не так? Может кто-нибудь показать мне, как отобразить локальное изображение? Это что, жучок?
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 все работало просто отлично.