Nano Hash - криптовалюты, майнинг, программирование

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

}

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

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

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

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


  • С изображением, которое вы сказали, работает по гиперссылке, это тоже файл .jpg? 21.12.2013
  • .jpg, .png, .gif, все распространенные форматы изображений отображаются правильно, если они представлены в виде гиперссылки. Я просто не хочу, чтобы компьютер полагался на подключение к Интернету только для отображения фона ... 21.12.2013

Ответы:


1

У меня это отлично сработало с .png, единственное заметное отличие, которое у меня было от вас, заключалось в том, что я разделил файл .css и свой background.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);
    }

}

Login.css:

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

И тогда, очевидно, мой background.png находится в том же каталоге, что и файл .css. Основное «изменение» в коде - это отметить, что с scene.getStyleSheet() я использовал ссылку на style /, а не только на ресурс.

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

Одно замечание: я компилирую 32-разрядную версию jdk 7.0_45. Это не должно иметь никакого значения, но вот оно.

20.12.2013
  • Я создал новый проект, взял на себя ваш код, взял на себя структуру ваших папок, вместо этого использовал файл png ... и мой фон такой же белый, как и всегда. Я думаю, что это ошибка в Eclipse Kepler / JavaFX. Я скачаю netbeans, попробую еще раз и опубликую здесь результаты. 21.12.2013
  • Я понимаю, что это немного позднее продолжение, но вам следует подумать о том, чтобы отправить сообщение о возможной ошибке на форумы eclipse Kepler / JavaFX, возможно, вы нашли случай, который они не рассматривали, или даже если они есть, хорошо, когда они получают отчеты о подобных вещах. Просто мысль :) Я рад, что у вас все получилось. NetBeans поддерживает javafx на высшем уровне. 23.12.2013

  • 2

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

    21.12.2013

    3

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

    11.03.2017

    4

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

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

    23.10.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..