Я привык писать код на 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, я получаю эти ошибки.
Это печально, потому что я нахожу IntelliJ >> NetBeans> Eclipse >> BlueJ. IntelliJ - САМЫЙ БЫСТРЫЙ способ программирования. У меня есть последняя версия для доступа к Java EE и плагинам базы данных, но теперь я вижу, что она не может запускать программу JavaFx без файла fxml. Кстати, спасибо.
@ 61KeystoMusic - Теперь вы неправильно видите. :) IntelliJ позволяет создавать программы JavaFX любого типа, используя FXML или код, или их комбинацию. Шаблон SAMPLE для приложения JavaFX в IntelliJ - это всего лишь образец. Вы можете изменить его как хотите.
Вы действительно пробовали использовать свой первый фрагмент кода в IntelliJ, прежде чем задать этот вопрос и сделать вывод, что это невозможно?
Да, конечно, пробовал. Я просто перезапустил свой компьютер, а затем создал обычное Java-приложение, а затем вставил код JavaFx без файла fxml. Как-то это сработало. Я думаю, что окно вылетало каждый раз, когда я бегал. Я серьезно не знаю, в чем проблема? Оба раза я писал именно так, как код, как фрагмент №1. В любом случае, теперь он работает, так что не беспокойтесь.




Вы определенно можете использовать IntelliJ с JavaFX без FXML.
В: Есть ли способ игнорировать использование файла fxml?
А: Учитывая фрагмент кода, на который вы ссылаетесь при настройке по умолчанию, которую вы получаете от IntelliJ при создании нового проекта JavaFX, да, их настройка по умолчанию использует .fxml, но это не обязательно. Вы можете удалить этот файл sample.fxml и переписать start по своему усмотрению.
Примечание: Ничто не мешает вам использовать как fxml, так и кодовый подход в одном проекте, в некоторых случаях использование fxml является лучшим подходом, в то время как в некоторых других ситуациях лучше использовать код.
В: Или я могу, используя стандартный способ кодирования (первый фрагмент кода), позволить компилятору преобразовать его в формат fxml для меня?
А: Невозможно преобразовать код Java в fxml, но, как я уже сказал, вам решать, какой из них использовать, и вы даже можете использовать их оба в одном проекте.
Нет проблем, если это решит ваш вопрос, отметьте его как решение, чтобы люди знали, что ваш вопрос решен.
Если ваша IDE вынуждает вас делать это из fxml, прекратите использовать эту IDE и используйте вместо нее лучшую. Использование fxml - это вариант, а не необходимость. В некоторых случаях использование fxml просто не лучший вариант, и если ваш fxml будет содержать> 10000 элементов, использовать fxml не рекомендуется. Компилятор не может производить вывод в формате fxml, поскольку его цель - создание файлов
.class. Кроме того, я не знаю никакого инструмента для преобразования java-кода в fxml (что часто даже невозможно; например, в fxml нет эквивалента циклам).