Программная настройка файла .fxml

Я привык писать код на JavaFx, подобный приведенному ниже, потому что так я учился несколько лет назад.

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.stage.*;

public class test extends Application {
    int c=0;
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Demo");
        Button b = new Button("Click me");
        Label l = new Label("Count = " + c);
        VBox v = new VBox(20);
        v.getChildren().addAll(b, l);
        b.setOnAction(event -> {
            c++;
            l.setText("Count = " +c);
        });
        primaryStage.setScene(new Scene(v, 300, 300));
        primaryStage.show();
    }
}

Я недавно установил JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6 и вижу, что для открытия окна primaryStage мне нужен файл fxml.

<?xml version = "1.0" encoding = "UTF-8"?>
<?import javafx.scene.layout.GridPane?>
<GridPane alignment = "center" hgap = "10" vgap = "10" xmlns = "http://javafx.com/javafx/8.0.121" xmlns:fx = "http://javafx.com/fxml/1" fx:controller = "sample.Main">
</GridPane>

И я должен сделать,

primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("sample.fxml")), 300, 300));

Если я запустил первый фрагмент кода, ничего не появится. Но если я заменю VBox v на FXMLLoader.load (getClass (). GetResources ("sample.fxml")), появится окно без кнопки и метки. Есть ли способ игнорировать использование файла fxml? Или я могу, используя стандартный способ кодирования (первый фрагмент кода), и позволить компилятору преобразовать его в формат fxml для меня?

Это потому, что я хочу иметь метки 100x100 в макете сетки, когда каждая метка составляет один пиксель. Следовательно, в коде легко запускать вложенные циклы for для инициализации и адресации каждой метки с помощью 2-мерного массива. Но инициализировать 1000 меток внутри fxml - это слишком долго, утомительно и нелогично.

Мне никогда не приходилось делать такие вещи в JetBrains IntelliJ IDEA Community Edition 2017.0.2. Когда я обновился до Ultimate Edition 2018.1.6, я получаю эти ошибки.

Если ваша IDE вынуждает вас делать это из fxml, прекратите использовать эту IDE и используйте вместо нее лучшую. Использование fxml - это вариант, а не необходимость. В некоторых случаях использование fxml просто не лучший вариант, и если ваш fxml будет содержать> 10000 элементов, использовать fxml не рекомендуется. Компилятор не может производить вывод в формате fxml, поскольку его цель - создание файлов .class. Кроме того, я не знаю никакого инструмента для преобразования java-кода в fxml (что часто даже невозможно; например, в fxml нет эквивалента циклам).

fabian 27.07.2018 14:12

Это печально, потому что я нахожу IntelliJ >> NetBeans> Eclipse >> BlueJ. IntelliJ - САМЫЙ БЫСТРЫЙ способ программирования. У меня есть последняя версия для доступа к Java EE и плагинам базы данных, но теперь я вижу, что она не может запускать программу JavaFx без файла fxml. Кстати, спасибо.

61 Keys to Music 27.07.2018 14:24

@ 61KeystoMusic - Теперь вы неправильно видите. :) IntelliJ позволяет создавать программы JavaFX любого типа, используя FXML или код, или их комбинацию. Шаблон SAMPLE для приложения JavaFX в IntelliJ - это всего лишь образец. Вы можете изменить его как хотите.

Zephyr 27.07.2018 15:31

Вы действительно пробовали использовать свой первый фрагмент кода в IntelliJ, прежде чем задать этот вопрос и сделать вывод, что это невозможно?

Zephyr 27.07.2018 15:33

Да, конечно, пробовал. Я просто перезапустил свой компьютер, а затем создал обычное Java-приложение, а затем вставил код JavaFx без файла fxml. Как-то это сработало. Я думаю, что окно вылетало каждый раз, когда я бегал. Я серьезно не знаю, в чем проблема? Оба раза я писал именно так, как код, как фрагмент №1. В любом случае, теперь он работает, так что не беспокойтесь.

61 Keys to Music 28.07.2018 10:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
278
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы определенно можете использовать IntelliJ с JavaFX без FXML.

В: Есть ли способ игнорировать использование файла fxml?

А: Учитывая фрагмент кода, на который вы ссылаетесь при настройке по умолчанию, которую вы получаете от IntelliJ при создании нового проекта JavaFX, да, их настройка по умолчанию использует .fxml, но это не обязательно. Вы можете удалить этот файл sample.fxml и переписать start по своему усмотрению.

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

В: Или я могу, используя стандартный способ кодирования (первый фрагмент кода), позволить компилятору преобразовать его в формат fxml для меня?

А: Невозможно преобразовать код Java в fxml, но, как я уже сказал, вам решать, какой из них использовать, и вы даже можете использовать их оба в одном проекте.

Нет проблем, если это решит ваш вопрос, отметьте его как решение, чтобы люди знали, что ваш вопрос решен.

FilipRistic 28.07.2018 10:51

Другие вопросы по теме