26.07.2018 17:10
OlegON
 
Что меня особенно вымораживает в Java - это невозможность создавать нормальные интерфейсы. Я не спец, мне нужен просто инструмент для написания костылей. Желательно, чтобы кроссплатформенный и именно RAD. Слепил окошко, покидал контролы и вперед. В Java все не так. SWT, Swing и прочие радости мало того, что позволяют вывихнуть мозг, так еще и попутно требуют написания горы мусора, описывая интерфейс и, в конечном итоге, требуемой быстроты и гибкости разработки не дают. Да, я писал эту стыдобу, на всем этом перечисленном. Интерфейсом назвать нельзя. То ли дело QT, например. Но не будем отвлекаться. Потребовалось в очередной раз написать костыль с формочками.

Решил попробовать новомодный Java FX и заодно записать последовательность, поскольку писать приходится редко и правильная забывается.

Надо сказать, что это, по сравнению с предыдущими геморройниками, таки просто прорыв. За исключением того, конечно, что под винду у вас все будет адски тормозить (среда разработки). Итак, лучшей средой разработки я, хоть и не разбираюсь в этом, считаю IntelliJ Idea. Соответственно к ней потребуется Scene Builder. Его можно взять у Gluon, но, поскольку наши рукожопы блокировщики перекрыли доступ по IP, я пользовался тем, что можно скачать с Oracle (там старая версия), впрочем, она нормально работает, по крайней мере без углубления в подробности.

Сразу после установки Scene Builder не забудьте его указать в Settings > Languages & Frameworks > Java FX, под виндой необходимо показать прямо на бинарник.

При создании проекта указываете Java FX, после чего создадутся три закладки: Main.java, Controller.java, sample.fxml

В последнем файлике - сама форма с компонентами, в предпоследнем - контроллер, т.е. то, что описывает взаимодействие кодом.

На fxml правой кнопкой и вызывайте Scene Builder (есть возможность переключиться на закладку, но мне этот вариант не понравился).

Появится вполне себе логичное окошко для создания формочек. Накидайте что-нибудь, не забывая выравнивать в разделе Layout справа. Есть даже нечто вроде margin в HTML. Я, соответственно, бросил Label и Button. Кстати, компоненты удобно искать в соответствующем окошке, а кидать можно не только в окно справа, но и вниз.




Дальше пришлось гуглить, как же связать форму, собственно, с контроллером. Делается это в разделе Documents




нашел не сразу... Собственно, дальше встал затык, как объявить Label в коде, как объект. Тоже долго мучился. Выяснилось, что для того, чтобы объекты видели форму и наоборот, необходимо их объявлять с приставкой @FXML, т.е.
Код:
@FXML
private Label TitleLabel;
в классе контроллера объявляет эту Label, а потом надо пойти опять в Scene Builder и привязать объявленную к объекту в поле fx:id.




Дальше встала задача связать факт нажатия кнопки с каким-то кодом в контроллере. Для начала написал этот самый код, контроллер стал выглядеть так

Код:
package sample;

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class Controller {
    @FXML
    private Label TitleLabel;

    @FXML
    private void handleDeletePerson() {
        System.out.println("PRINT TO CONSOLE");
        TitleLabel.setText("LABEL OWNED!");
    }

}
и идти опять в Scene Builder, чтобы эту процедуру привязать к кнопке

Обратите внимание, что Label много где присутствует, импортировать надо из javafx. Собственно, все, минимальное достигнуто. После запуска появится формочка (ее, кстати, в меню Preview или по Ctrl-P в самом билдере можно посмотреть). Можно будет нажать кнопочку, текст Label поменяется и в консоли текст выскочит... По сравнению с тем, что было в Delphi - вообще страшный бубен, но по сравнению с SWT или Swing - очень даже человеческое...
30.07.2018 19:39
Tema
 
Цитата:
Собственно, дальше встал затык, как объявить Label в коде, как объект. Тоже долго мучился. Выяснилось, что для того, чтобы объекты видели форму и наоборот, необходимо их объявлять с приставкой @FXML, т.е.
Вообще, на самом деле в JavaFX два пути написания - либо используя файл xml и аннотации (то самое @FXML + визуальная надстройка для всего этого в виде SceneBuilder'a) , либо объявляя объекты прямо в коде.
30.07.2018 20:08
OlegON
 
Да, я понял, но проблема в том, что RAD, на мой взгляд, ничего общего с объявлением объектов в коде не имеет. Просто сами объекты расположить, чтобы они как-то с эргономикой сочетались, это не вариант, если надо поправить в тексте, запустить и посмотреть. В этом плане старые Delphi и прочие билдеры куда как проще, а, значит, быстрее. Покидал на форму, назначил Action и вперед...

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.