JavaRush /Java блогы /Random-KK /Java FX-ке кіріспе
Константин
Деңгей

Java FX-ке кіріспе

Топта жарияланған
Бір күні менің қажеттіліктеріме арналған шағын жұмыс үстелі қосымшасын жазу идеясы болды - шетел сөздерін үйренуге арналған шағын сөздік сияқты нәрсе - және мен миымды тырнап бастадым, мұны қалай істей аламын? Әрине, бірінші ойыма Свинг келді. Барлығы Свинг туралы естіген шығар . Бұл пайдаланушы, графикалық интерфейстерді құруға арналған кітапхана. Біздің сүйікті Oracle әлі Swing-тен толығымен бас тартпағандықтан, ол ескірген деп саналмайды және қосымшалар әлі де жұмыс істейді. Дегенмен, ол енді Swing арқылы жаңартылмайды және Oracle қызметкерлері бізге JavaFX болашағының дәмін берді. Шындығында, JavaFX қызмет провайдері ретінде Swing компоненттерін пайдаланады)

JavaFX дегеніміз не?

JavaFX негізінен Java үшін GUI құралдар жинағы болып табылады. Бұл жерде кішігірім ауытқу болады және біз GUI не екенін есте сақтаймыз : Графикалық пайдаланушы интерфейсі - графикалық пайдаланушы интерфейсі пайдаланушы интерфейсінің бір түрі, онда барлық элементтер (түймелер, мәзірлер, белгішелер, тізімдер) пайдаланушыға экранда ұсынылады. бейнелеу сурет, графика түрінде жасалады. Пәрмен жолы интерфейсінен айырмашылығы, графикалық интерфейсте пайдаланушы енгізу құрылғыларын пайдаланып көрінетін нысандарға кездейсоқ қол жеткізе алады. Көбінесе интерфейс элементтері метафора түрінде жүзеге асырылады және пайдаланушының түсінуін жеңілдету үшін олардың қасиеттері мен мақсатын көрсетеді. JavaFX Java тілінде ойындар мен жұмыс үстелі қосымшаларын жасауға бағытталған. Іс жүзінде ол Java үшін ұсынылған жаңа GUI құралының арқасында Swing-ті ауыстырады. Сондай-ақ, ол бізге GUI орналасу файлдарын (XML) стильдеуге және веб-қосымшаларда үйренгенімізге ұқсас CSS көмегімен оларды талғампаз етуге мүмкіндік береді. JavaFX қосымша біріктірілген 3D графикасын, сондай-ақ аудио, бейне және ендірілген желілік қолданбаларды бір GUI құралдар жинағында өңдейді... Оны үйрену оңай және жақсы оңтайландырылған. Ол көптеген операциялық жүйелерді, сонымен қатар Windows, UNIX жүйелерін және Mac OS жүйесін қолдайды. Java FX-ке кіріспе - 3

JavaFX мүмкіндіктері:

  • JavaFX бастапқыда барлық түрдегі түймелер, мәтіндік өрістер, кестелер, ағаштар, мәзірлер, диаграммалар және т.б. сияқты графикалық интерфейс бөліктерінің үлкен жиынтығымен келеді, бұл өз кезегінде бізге көп уақытты үнемдейді.
  • JavaFX жиі CSS мәнерлерін пайдаланады және біз оны Java codeында емес, GUI жасау үшін арнайы FXML пішімін пайдалана аламыз. Бұл ұзақ уақыт бойы Java codeымен ойнамай-ақ графикалық интерфейсті жылдам орналастыруды немесе сыртқы түрін немесе композицияны өзгертуді жеңілдетеді.
  • JavaFX-те пайдалануға дайын диаграмма бөліктері бар, сондықтан сізге негізгі диаграмма қажет болған кезде оларды нөлден жазудың қажеті жоқ.
  • JavaFX қосымша 3D графикалық қолдауымен бірге жеткізіледі, бұл біз қандай да бір ойын түрін немесе ұқсас қолданбаларды жасап жатқанда жиі пайдалы.
Терезенің негізгі құрамдастарын аздап қарастырайық:
  • Сахна - бұл бастапқы кенеп ретінде әрекет ететін және қалған құрамдас бөліктерді қамтитын айналадағы терезе. Қолданбада бірнеше кезең болуы мүмкін, бірақ кез келген жағдайда осындай бір компонент болуы керек. Негізінде, Stage негізгі контейнер және кіру нүктесі болып табылады.
  • Көрініс - сахнаның мазмұнын көрсетеді (ұя салған қуыршақ сияқты). Әрбір кезеңде бірнеше құрамдас бөліктер болуы мүмкін - сахна, олар бір-бірімен ауыстырылуы мүмкін. Ішінде бұл көрініс графигі деп аталатын нысан графигі арқылы жүзеге асырылады (мұнда әрбір элемент түйін болып табылады, ол Түйін деп те аталады ).
  • Түйіндер - олардың ішінде бірнеше кірістірілген құрамдастары болуы мүмкін жапсырма түймелері немесе тіпті орналасулар сияқты басқару элементтері. Әрбір көріністе бір кірістірілген түйін болуы мүмкін, бірақ ол бірнеше құрамдастары бар орналасу болуы мүмкін. Ұя салу көп деңгейлі болуы мүмкін, макеттерде басқа орналасулар мен тұрақты құрамдас бөліктер бар. Әрбір осындай түйіннің өз идентификаторы, стилі, әсерлері, күйі және оқиғалар өңдегіштері болады.
Java FX-ке кіріспе - 4 Сонымен, codeқа қарай сәл жылжайық. Мен Java 8-ді пайдаланғандықтан, ешқандай тәуелділікті алудың қажеті жоқ, себебі JavaFx әдепкі бойынша JDK-де (Java 9.10-дағы сияқты), бірақ бізде Java 11+ болса, онда біз maven репозиторийіне өтуіміз керек және оны тәуелділіктерден алыңыз.

JavaFX: қолдану мысалдары

Біз әдеттегі классты әдіспен main(кіру нүктесі) жасаймыз:
public class AppFX extends Application {

    public static void main(String[] args) {
        Application.launch();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
pimarySatge.show();
    }
}
Мұнда біздің сынып мұрагері javafx.application.Application(бізде Бугага қорабынан алынған). Негізінде біз launch()терезені іске қосу үшін статикалық қолданба әдісін шақырамыз. Сондай-ақ, біздің идеямыз Қолдану әдісін жүзеге асырмадық деп шағымданады, startбұл біз ақыр соңында жасаймыз. Ол не үшін? Ал қасиеттерді басқара алу үшін (біздің терезенің функционалдығы). Бұл әрекетті орындау үшін біз кіріс аргументін қолданамыз, primaryStageол бойынша біз әдіс деп атаймыз show, осылайша терезені іске қосу арқылы көре аламыз main. Әдісімізді аздап толтырайық start:
public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Dogs application");
    primaryStage.setWidth(500);
    primaryStage.setHeight(400);

    InputStream iconStream =
    getClass().getResourceAsStream("/images/someImage.png");
    Image image = new Image(iconStream);
    primaryStage.getIcons().add(image);

    Button button = new Button("WOF WOF ???'");

    button.setOnAction(e -< {
      Alert alert = new Alert(Alert.AlertType.INFORMATION, "WOF WOF WOF!!!");
        alert.showAndWait();
    });
    Scene primaryScene = new Scene(button);
    primaryStage.setScene(primaryScene);

    primaryStage.show();
}
Сонымен, біз мұнда не көріп тұрмыз? Оны жол-жол арқылы көрейік: 2 - терезенің атын орнату (кезең) 3.4 - оның өлшемдерін орнату 6.7 - файлға оқу ағынының жолын орнату (белгіше) Java FX-ке кіріспе - 58 - файлды Image нысаны ретінде жасау, конструкторда берілген ағын арқылы нақты файлға қосылатын 9 - терезенің жоғарғы панеліне белгішені орнату 11 - түйме нысанын жасау 13-16 - түймені басқан кездегі реакцияны орнату 17 - көрініс құру біз 18 түймемізді орналастырамыз - көріністі ортақ тереземізге орналастырамыз 20 - терезеге көріну жалауын орнатамыз және нәтижесінде біз сүйікті песелдерді қарсы алатын шағын терезе аламыз: Java FX-ке кіріспе - 6Барлығы Swing-тен әлдеқайда қарапайым көрінеді, солай емес пе? Бірақ әлі біткен жоқ. Қолданбаны көрсету үшін барлық codeты жазу жақсы емес, оны түсінікті ету үшін оны қандай да бір жолмен бөлу керек (бір себетке графикалық компоненттер, екіншісінде логика). Міне, xml суретке түседі ... Құдай-ау, xml? Дәл. Атап айтқанда, біз JavaFX - FXML үшін оның арнайы іске асырылуын қолданамыз, онда біз қолданбаның графикалық құрамдастарын және олардың қасиеттерін (барлық өлшемдер және т.б.) анықтаймыз, содан кейін оларды логиканы басқаруға көмектесетін контроллерге қосамыз. Осы xml мысалын қарастырайық:
<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<VBox xmlns="http://javafx.com/javafx"  xmlns:fx="http://javafx.com/fxml"
   id="Dogs application" prefHeight="200" prefWidth="300" alignment="center">

  <Label text="Wow wow?"/>

  <Button fx:id="mainButton" text="Greeting" onAction="buttonClicked()"/>

    <fx:script>
       function buttonClicked() {
            mainButton.setText("Wow wow wow!!!")
       }
    </fx:script>
</VBox>
2 - біз қолданатын сценарий тілі 4-6 - импортталған деректер 8-9 Vbox - ішкі құрамдастарды бір жолға орналастыратын контейнер. 11 - кейбір мәтінді көрсету 13 - түймені басқан кезде 15-18 жолдардағы сценарийде сипатталған әдісті қолданамыз. Бұл xml файлын шақыру үшін әдісте code болуы керек start, бірақ қазір бұл соншалықты маңызды емес және біз оны өткізіп жібереді (төменде бұл файлды тартудың мысалы болады). Сонымен, xml, әрине, жақсы (бірақ өте жақсы емес), оларды қолмен жазу өте түсініксіз, бұл өткен ғасыр емес пе? Java FX-ке кіріспе - 7

JavaFX SceneBuilder бағдарламасымен таныстыру

Дәл осы кезде (барабан орамы) іске қосылады - SceneBuilder JavaFX-те Scene Builder - бұл құрал, оның көмегімен біз терезелерімізді графикалық интерфейс түрінде жобалай аламыз, содан кейін оларды сақтай аламыз және бұл бағдарлама нәтижеге негізделген xml файлдарын құрастырыңыз, біз оны қолданбамызда жақсартамыз. Бұл fmxl құрастырушысының интерфейсі келесідей көрінеді: Java FX-ке кіріспе - 8

Шағын ауытқу. JavaFX сабақтары

Мен орнату мәліметтерін және осы құралды егжей-тегжейлі зерттеуді өткізіп жіберемін. Бұл әрі қарай зерттеуге тұрарлық тақырыптар. Сондықтан мен әлі де JavaFX сабақтарына бірнеше қызықты сілтемелер қалдырамын: біреуі (JavaFX бойынша онлайн оқулық) және екеуі (тағы бір жақсы оқулық). Мен сызған шағын мысалды қарастырайық. Соңында мен келесідей нәрсе алдым: Java FX-ке кіріспе - 9
(иттерді тіркеуге арналған терезе сияқты)
Итті таңдап, «Жою» түймесін басқанда, ит біздің тізімнен жойылады. Төрт аяқты досты таңдап, оның өрістерін өзгерткенде және «Өңдеу» түймесін басқаннан кейін ит туралы ақпарат жаңартылады. «Жаңа» түймесін басқан кезде, жаңа ит үшін жазба жасау үшін терезе пайда болады (оның атымен басталады): Java FX-ке кіріспе - 10Содан кейін Сақтау түймесін басыңыз және бірінші терезеде оның қалған өрістерін толтырыңыз, содан кейін «Өңдеу» түймесін басыңыз. сақтау. Оңай естіледі, иә? Бұл біздің Java қолданбасында қалай көрінетінін көрейік. Бастау үшін мен мына жерде жасалған екі терезе үшін xml макеттерін қалдырамын SceneBuilder: Бірінші (негізгі):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<AnchorPane prefHeight="300.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.tutorial.controller.BaseController">
   <children>
      <SplitPane dividerPositions="0.29797979797979796" prefHeight="300.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <items>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <TableView fx:id="dogs" layoutX="-2.0" layoutY="-4.0" prefHeight="307.0" prefWidth="190.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="-2.0" AnchorPane.rightAnchor="-13.0" AnchorPane.topAnchor="-4.0">
                    <columns>
                      <TableColumn fx:id="nameList" prefWidth="100.33334350585938" text="Nickname" />
                    </columns>
                     <columnResizePolicy>
                        <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                     </columnResizePolicy>
                  </TableView>
               </children>
            </AnchorPane>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <Label layoutX="49.0" layoutY="25.0" text="Person Details" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
                  <GridPane accessibleText="erreererer" gridLinesVisible="true" layoutX="5.0" layoutY="31.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="31.0">
                    <columnConstraints>
                      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                    </columnConstraints>
                    <rowConstraints>
                      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                    </rowConstraints>
                     <children>
                        <Label prefHeight="17.0" prefWidth="70.0" text="Nickname" />
                        <Label text="Breed" GridPane.rowIndex="1" />
                        <Label text="Age" GridPane.rowIndex="2" />
                        <Label text="City" GridPane.rowIndex="3" />
                        <Label text="Level of training" GridPane.rowIndex="4" />
                        <TextField fx:id="breed" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                        <TextField fx:id="age" GridPane.columnIndex="1" GridPane.rowIndex="2" />
                        <TextField fx:id="city" GridPane.columnIndex="1" GridPane.rowIndex="3" />
                        <TextField fx:id="levelOfTraining" GridPane.columnIndex="1" GridPane.rowIndex="4" />
                        <TextField fx:id="name" GridPane.columnIndex="1" />
                     </children>
                  </GridPane>
                  <Button layoutX="251.0" layoutY="259.0" mnemonicParsing="false" onAction="#create" text="New" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="230.0" AnchorPane.rightAnchor="130.0" AnchorPane.topAnchor="260.0" />
                  <Button layoutX="316.0" layoutY="262.0" mnemonicParsing="false" onAction="#edit" text="Edit" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="290.0" AnchorPane.rightAnchor="70.0" AnchorPane.topAnchor="260.0" />
                  <Button layoutX="360.0" layoutY="262.0" mnemonicParsing="false" onAction="#delete" text="Delete" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="350.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="260.0" />
               </children>
            </AnchorPane>
        </items>
      </SplitPane>
   </children>
</AnchorPane>
Екінші (жаңа иттерді жасау үшін):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="200.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.tutorial.controller.NewDogController">
   <children>
      <GridPane layoutX="31.0" layoutY="25.0" prefHeight="122.0" prefWidth="412.0">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="185.0" minWidth="10.0" prefWidth="149.0" />
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="173.0" minWidth="10.0" prefWidth="146.0" />
        </columnConstraints>
        <rowConstraints>
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <Label prefHeight="48.0" prefWidth="178.0" text="Please, write name:">
               <font>
                  <Font size="20.0" />
               </font>
            </Label>
            <TextField fx:id="nickName" prefHeight="36.0" prefWidth="173.0" GridPane.columnIndex="1" />
         </children>
      </GridPane>
      <Button layoutX="222.0" layoutY="149.0" mnemonicParsing="false" onAction="#ok" prefHeight="37.0" prefWidth="95.0" text="Save" />
      <Button layoutX="325.0" layoutY="149.0" mnemonicParsing="false" onAction="#cansel" prefHeight="37.0" prefWidth="95.0" text="Cansel" />
   </children>
</AnchorPane>
Қалта құрылымы қалай көрінеді: Java FX-ке кіріспе - 11Көріп отырғаныңыздай, ерекше ештеңе жоқ, белгілі бір терезелерді көрсететін контроллерлер бар, деректерімізді көрсететін модельдер бар. Қолданбаны іске қосатын классты қарастырайық (Қолданбаны іске асыру): @Data
public class AppFX extends Application {

    private Stage primaryStage;
    private AnchorPane rootLayout;
    private ObservableList listDog = FXCollections.observableArrayList();

    public AppFX() {
        listDog.add(new Dog("Fluffy", "Pug", 8, "Odessa", 2));
        listDog.add(new Dog("Archie", "Poodle", 3, "Lviv", 6));
        listDog.add(new Dog("Willie", "Bulldog", 5, "Kiev", 4));
        listDog.add(new Dog("Hector", "Shepherd", 9, "Minsk", 6));
        listDog.add(new Dog("Duncan", "Dachshund", 1, "Hogwarts", 9));
    }
Мұнда біз бастапқы деректерімізді толтыратын конструкторды көреміз (біз оны арнайы парақта сақтаймыз - ObservableList).
public static void main(String[] args) {
        Application.launch();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("Dogs application");
        showBaseWindow();
}
Ерекше ештеңе жоқ - және қолданбаны іске қосатын mainіске асыру :start()
public void showBaseWindow() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(AppFX.class.getResource("/maket/rootWindow.fxml"));
            rootLayout = loader.load();
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            InputStream iconStream = getClass().getResourceAsStream("/icons/someImage.png");
            Image image = new Image(iconStream);
            primaryStage.getIcons().add(image);
            BaseController controller = loader.getController();
            controller.setAppFX(this);
            primaryStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Сонымен, мұнда біз шын мәнінде іске қосатын әдісті көреміз start(), атап айтқанда, біздің негізгі терезенің параметрлерін орнататын әдіс. Ресурстардағы xml орналасуы сияқты: оған белгішені беру, оны белгілі бір контроллерге байланыстыру және контроллерге сыныпқа сілтеме беру this)
public void showCreateWindow(Dog dog) {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(AppFX.class.getResource("/maket/new.fxml"));
            AnchorPane page = loader.load();
            Stage dialogStage = new Stage();
            dialogStage.setTitle("Wow Wow Wow");
            dialogStage.initModality(Modality.WINDOW_MODAL);
            dialogStage.initOwner(primaryStage);
            dialogStage.setScene(new Scene(page));
            CreateController controller = loader.getController();
            controller.setDialogStage(dialogStage);
            controller.setDog(dog);
            dialogStage.showAndWait();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Мұнда біз екінші терезенің пайда болуына жауап беретін әдісті көреміз - жаңа жазба жасау терезесі (жаңа иттің аты). Біз сондай-ақ контроллерді, xml орналасуын, сахнасын және т.б. орнатамыз... Біз қарастыратын келесі сынып итімізді бейнелейтін модель болады (ол туралы ақпарат): @Data
public class Dog {

    private StringProperty name;
    private StringProperty breed;
    private IntegerProperty age;
    private StringProperty city;
    private IntegerProperty levelOfTraining;

    public Dog(String name, String breed, int age, String city, int levelOfTraining) {
        this.name = new SimpleStringProperty(name);
        this.breed = new SimpleStringProperty(breed);
        this.age = new SimpleIntegerProperty(age);
        this.city = new SimpleStringProperty(city);
        this.levelOfTraining = new SimpleIntegerProperty(levelOfTraining);
    }

    public Dog() {
        name = new SimpleStringProperty();
        breed = null;
        age = null;
        city = null;
        levelOfTraining = null;
    }
}
Мұнда біз екі конструкторды көреміз.Біреуі барлық аргументтері бар кәдімгі дерлік (біз қарапайым түрдегі арнайы FX орауыштарын қолданатындықтан дерлік) және аргументсіз конструктор: біз оны жаңа ит жасағанда пайдаланамыз, басында тек аты. Негізгі терезеге арналған контроллер: @Data
public class BaseController {

    @FXML
    private TableView dogs;
    @FXML
    private TableColumn nameList;
    @FXML
    private TextField name;
    @FXML
    private TextField breed;
    @FXML
    private TextField age;
    @FXML
    private TextField city;
    @FXML
    private TextField levelOfTraining;
    private AppFX appFX;
Мұнда біз нысан өрістерін көреміз, бірақ TextField пішімінде. Бұл мәтін енгізу өрісін көрсететін пішім. @FXML - бұл Java codeын және орналасуымыздың сәйкес нысанын (түйме, өріс немесе басқа нәрсе) байланыстыруға арналған annotation.
@FXML
private void initialize() {
    nameList.setCellValueFactory(
            cellData -> cellData.getValue().getName());
    dogs.getSelectionModel().selectedItemProperty().addListener(
            (observable, oldValue, newValue) -> showDogsInformation(newValue));
}
Мұнда біз тізімнің оң жағында ит атауларын көрсету әдісін көреміз (оның @FXML annotationсы JavaFX TableView орналасу компонентімен байланыстырылады).
public void setAppFX(AppFX appFX) {
    this.appFX = appFX;
    dogs.setItems(appFX.getListDog());
}

private void showDogsInformation(Dog dog) {
    if (dog != null) {
        name.setText(dog.getName() != null ? dog.getName().getValue() : null);
        breed.setText(dog.getBreed() != null ? dog.getBreed().getValue() : null);
        age.setText(dog.getAge() != null ? String.valueOf(dog.getAge().get()) : null);
        city.setText(dog.getCity() != null ? dog.getCity().getValue() : null);
        levelOfTraining.setText(dog.getLevelOfTraining() != null ? String.valueOf(dog.getLevelOfTraining().get()) : null);
    } else {
        name.setText("");
        breed.setText("");
        age.setText("");
        city.setText("");
        levelOfTraining.setText("");
    }
}
Бірінші әдісте біз Application іске асыратын сыныпқа ішкі сілтеме орнатуды көреміз (сонымен біз оның әдісін екінші терезені шақыру үшін шақыра аламыз) және көрсетілетін бастапқы тізімді орнатуды көреміз. Екіншісі ағымдағы итте белгілі деректердің бар-жоғын тексереді және осының негізінде мәтіндік өрістерді орнатады:
@FXML
    private void delete() {
        int selectedIndex = dogs.getSelectionModel().getSelectedIndex();
        dogs.getItems().remove(selectedIndex);
    }

    @FXML
    private void edit() {
        int selectedIndex = dogs.getSelectionModel().getSelectedIndex();
        dogs.getItems().set(selectedIndex, new Dog(name.getText(), breed.getText(), Integer.valueOf(age.getText()), city.getText(), Integer.valueOf(levelOfTraining.getText())));
    }

    @FXML
    private void create() {
        Dog someDog = new Dog();
        appFX.showCreateWindow(someDog);
        if (someDog.getName() != null && !someDog.getName().getValue().isEmpty()) {
            appFX.getListDog().add(someDog);
        }
    }
}
Мұнда түймелермен байланысты негізгі терезенің үш әдісін көреміз: Java FX-ке кіріспе - 12
  • жою — таңдалған (таңдалған) итті индекс бойынша жою;
  • өңдеу - тасымалданған деректермен жаңа ит жасаңыз және оны бұрынғының орнына орнатыңыз;
  • құру - біз жаңа ит жасаймыз және құру терезесін шақыру әдісін шақырамыз, жаңа нысанды өткіземіз және оны жапқаннан кейін, егер аты бос болмаса, жаңа үй жануарын сақтаңыз.
Әрі қарай, итті жасауға арналған терезе контроллері: @Data
public class CreateController {
    private Stage dialogStage;
    private Dog dog;

    @FXML
    private TextField nickName;

    @FXML
    private void ok() {
        if (nickName != null && !nickName.getText().isEmpty()) {
            dog.setName(new SimpleStringProperty(nickName.getText()));
            dialogStage.close();
        }
    }

    @FXML
    private void cansel() {
        dialogStage.close();
    }
}
Мұнда біз терезені қандай да бір түрде жабатын Сақтау және Болдырмау түймелерін өңдей отырып, терезедегі мәтіндік өріспен байланысты көреміз. Көріп отырғаныңыздай, кішігірім қосымшамда ыңғайлы болу үшін мен Lombok-ты қолдандым, әйтпесе code өте өсер еді және мен оны шолуыма сыйғызбас едім. Бүгінгі күнім осы болса керек. Бүгін біз JavaFX пайдаланудың негізгі ұғымдарымен және мысалымен қысқаша таныстық және біз шағын жұмыс үстелі қосымшаларын құра аламыз (қосымша ақпаратты пайдалана отырып, бақытымызға орай, Интернетте көп). Ал сіз өз кезегінде ұнайсыз))
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION