JavaRush /Java Blog /Random-TK /Java FX bilen tanyşlyk

Java FX bilen tanyşlyk

Toparda çap edildi
Bir gün isleglerim üçin kiçijik iş stoly programmasy - daşary ýurt sözlerini öwrenmek üçin kiçijik sözlük ýaly bir zat ýazmak pikiri döredi we beýnimi sarsdyryp başladym, muny nädip edip bilerin? Elbetde, kelläme ilkinji gelen zat Swing boldy. Swing hakda hemmeler eşiden bolsa gerek . Bu ulanyjy, grafiki interfeýsleri döretmek üçin kitaphanadyr. Söýgüli Oracle-yň Swing-den entek doly ýüz öwürmändigi sebäpli, köne hasap edilmeýär we programmalar henizem işleýär. Şeýle-de bolsa, ol indi Swing tarapyndan döwrebaplaşdyrylmaýar we Oracle-daky adamlar bize JavaFX-iň geljeginiň nämedigini görkezdi. Aslynda, JavaFX Swing komponentlerini hyzmat üpjün ediji hökmünde ulanýar)

JavaFX näme?

JavaFX aslynda Java üçin GUI gurallarydyr. Bu ýerde kiçijik bir ýalňyşlyk bolar we GUI- iň nämedigini ýadymyzda saklarys : Grafiki ulanyjy interfeýsi - grafiki ulanyjy interfeýsi ulanyjy interfeýsiniň bir görnüşidir, onda ähli elementler (düwmeler, menýular, nyşanlar, sanawlar) ulanyja hödürlenýär. ekran suratlar, grafika görnüşinde ýasalýar. Buýruk setiriniň interfeýsinden tapawutlylykda, GUI-de ulanyjy giriş enjamlaryny ulanyp görünýän obýektlere tötänleýin girip biler. Köplenç interfeýs elementleri metafora görnüşinde amala aşyrylýar we ulanyjylaryň düşünmegini aňsatlaşdyrmak üçin häsiýetlerini we maksadyny görkezýär. JavaFX Java-da oýunlar we iş stoly programmalaryny döretmäge gönükdirilendir. Aslynda, Java üçin teklip edilýän täze GUI guraly sebäpli Swingiň ornuny tutar. Mundan başga-da, GUI düzüliş faýllaryny (XML) düzmäge we web programmalarynda öwrenişişimize meňzeş CSS ulanyp has owadanlaşdyrmaga mümkinçilik berýär. JavaFX goşmaça GUI gurallar toplumynda integrirlenen 3D grafikalary, şeýle hem ses, wideo we oturdylan tor programmalaryny dolandyrýar ... Öwrenmek aňsat we gowy optimizir. Köp operasiýa ulgamlaryny, şeýle hem Windows, UNIX ulgamlaryny we Mac OS-ny goldaýar. Java FX bilen tanyşlyk - 3

JavaFX aýratynlyklary:

  • JavaFX başda her dürli düwmeler, tekst meýdanlary, stollar, agaçlar, menýular, diagrammalar we ş.m. ýaly grafiki interfeýs bölekleriniň uly toplumy bilen gelýär, bu bolsa öz gezeginde bize köp wagt tygşytlar.
  • JavaFX köplenç CSS stillerini ulanýar we biz Java kodunda däl-de, GUI döretmek üçin ýörite FXML formatyny ulanyp bileris. Bu, GUI-ni çalt düzmegi ýa-da Java kody bilen oýnamazdan daşky görnüşini ýa-da düzümini üýtgetmegi aňsatlaşdyrýar.
  • JavaFX-da ulanmaga taýyn diagramma bölekleri bar, şonuň üçin esasy diagramma gerek wagty olary noldan ýazmaly däldiris.
  • JavaFX goşmaça 3D grafiki goldaw bilen üpjün edilýär, bu haýsydyr bir oýun ýa-da şuňa meňzeş programmalary ösdürýän bolsak köplenç peýdalydyr.
Penjirämiziň esasy böleklerine azajyk göz aýlalyň:
  • Sahna , başlangyç kanwas hökmünde hereket edýän we galan böleklerini öz içine alýan daş-töweregi penjire. Programmanyň birnäçe basgançagy bolup biler, ýöne islendik ýagdaýda şeýle komponent bolmaly. Aslynda, esasy konteýner we giriş nokady.
  • Sahna - sahnanyň mazmunyny görkezýär (höwürtge gurjak ýaly). Her etapda öz aralarynda çalşyp boljak birnäçe komponent - sahna bolup biler. Içerde, bu “Sahna grafigi” (her element düwün bolup, düwün diýilýär ) atly obýekt grafigi bilen amala aşyrylýar.
  • Düwünler , bellik düwmeleri ýa-da içerde birnäçe öýjükli komponentleri bolup bilýän dolandyryşlardyr. Her sahnada bir öýjükli düwün bolup biler, ýöne köp komponentli düzüliş bolup biler. Höwürtge, beýleki tertipleri we yzygiderli komponentleri öz içine alýan köp derejeli bolup biler. Şeýle düwünleriň hersiniň öz kesgitleýjisi, stili, täsiri, ýagdaýy we hadysalary dolandyryjylary bar.
Java FX bilen tanyşlyk - 4 Geliň, koda birneme geçeliň. Java 8 ulanýandygym sebäpli, hiç hili garaşlylygy çekmegiň zerurlygy ýok, sebäbi JavaFx deslapky görnüşde (Java 9.10-da bolşy ýaly) JDK-da, ýöne Java 11+ bar bolsa, maven ammaryna gitmeli we baglylyklaryndan çekiň.

JavaFX: ulanylyş mysallary

mainUsul (giriş nokady) bilen yzygiderli synp döredýäris :
public class AppFX extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
pimarySatge.show();
    }
}
Bu ýerde synpymyz miras alýar javafx.application.Application(bizde Bugaga gutusyndan). launch()Esasan penjirämizi açmak üçin statiki Programma usuly diýýäris . startMundan başga-da, biziň pikirimiz, ahyrky netijede ýerine ýetirýän Programma usulyny durmuşa geçirmedigimizden zeýrener . Bu näme üçin? Sypatlary dolandyrmak üçin (penjirämiziň işleýşi). Munuň üçin penjiräniň açylýandygyny görmek üçin primaryStageusul diýilýän giriş argumentini ulanýarys . Usulymyzy azajyk dolduralyň : showmainstart
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();
}
Bu ýerde näme görýäris? Geliň Java FX bilen tanyşlyk - 5: konstruktor 9-dan geçen akym bilen hakyky faýla birikdirilen - 11-nji penjiräniň ýokarky panelinde nyşan goýuň - 13-16 düwme obýektini dörediň - düwme 17 basylanda reaksiýany düzüň - bu ýerde sahna dörediň! 18-nji düwmämizi goýýarys - sahnany umumy penjire 20-ä ýerleşdirýäris - penjire üçin görünýän baýdagy düzýäris we netijede halaýan pesellerimizi garşylamak üçin kiçijik penjire alýarys: Java FX bilen tanyşlyk - 6Hemme zat Swingden has ýönekeý görünýär, şeýlemi? Emma entek gutaranok. Programmany görkezmek üçin ähli kodlary ýazmak gowy däl; has düşnükli bolmagy üçin ony nädip bölmeli (bir sebetdäki grafiki komponentler, beýlekisinde logika). Ine, xml surata girýär ... Hudaýym, xml? Takyk. Hususan-da, programmanyň grafiki komponentlerini we olaryň häsiýetlerini (her dürli ululyk we ş.m.) kesgitleýän JavaFX - FXML üçin aýratyn ýerine ýetirişini ulanýarys, soňra bolsa logikany dolandyrmaga kömek edýän kontrolleýere birikdirýäris. Geliň, bu xml mysalyna seredeliň:
<?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 ulanýan skript dilimiz - import edilen maglumatlar 8-9 Vbox - kiçi komponentleri bir setirde ýerleşdirýän gap. 11 - käbir teksti görkez 13 - düwme, basylanda 15-18-nji setirlerde skriptde beýan edilen usuly ulanýarys. Bu xml faýly usulda çagyrmak üçin kod bolmaly start, ýöne indi bu beýle möhüm däl we biz goýmaz (aşakda bu faýly çekmegiň mysaly bolar). Diýmek, xml elbetde gowy (ýöne gaty gowy däl), olary el bilen ýazmak gaty bulaşyk, bu geçen asyr dälmi? Java FX bilen tanyşlyk - 7

JavaFX SceneBuilder bilen tanyşdyrmak

Hut şu pursatda (deprek rulony) oýnaýar - SceneBuilder JavaFX Scene Builder, penjirelerimizi grafiki interfeýs görnüşinde dizaýn edip, soň bolsa ýatda saklap bilýän guraldyr we netijä esaslanýan bu programma eder. xml faýllaryny guruň, ony programmamyzda kämilleşdireris. Bu fmxl gurluşykçynyň interfeýsi şuňa meňzeýär: Java FX bilen tanyşlyk - 8

Kiçijik ýalňyşlyk. JavaFX sapaklary

Gurmak jikme-jikliklerini we bu guralyň jikme-jik öwrenilmegini geçerin. Bular has giňişleýin öwrenilmeli mowzuklar. Şonuň üçin JavaFX sapaklaryna henizem birnäçe gyzykly baglanyşyk goýaryn: biri (JavaFX boýunça onlaýn sapak) we ikisi (beýlekisi gowy sapak). Çyzan azajyk mysalymyza geçeliň. Ahyrynda bir zat aldym: Java FX - 9
(itleri hasaba almak üçin penjire ýaly)
It saýlap, eteok etmek düwmesine basanyňyzda it sanawymyzdan aýrylýar. Dört aýakly dostuňyzy saýlap, meýdanlaryny üýtgedeniňizde we “Edit” düwmesine basanyňyzdan soň itiň maglumatlary täzelenýär. Täze düwmä basanymyzda, täze it üçin ýazgy döretmek üçin (adyndan başlamak üçin) penjire açylýar: Java FX bilen tanyşlyk - 10Soňra Saklamak düwmesine basyň we galan meýdanlaryny birinji penjirede dolduryň, soňra bolsa Edit düwmesine basyň tygşytlaň. Aňsat görünýär, şeýlemi? Java programmamyzda munuň nähili boljakdygyny göreliň. Ilki bilen, şu ýerde döredilen bu iki penjire üçin xml düzülişini şu ýerde goýaryn SceneBuilder: Birinjisi (esasy):
<?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>
Ikinjisi (täze itleri döretmek üçin):
<?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>
Papkanyň gurluşynyň görnüşi: Java FX bilen tanyşlyk - 11Görşüňiz ýaly üýtgeşik zat ýok, belli bir penjireleri görkezýän dolandyryjylar bar, maglumatlarymyzy görkezýän modeller bar. Programmany işe girizýän synpa göz aýlalyň (Programmany durmuşa geçirmek): @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));
    }
Bu ýerde başlangyç maglumatlarymyzy doldurjak konstruktory görýäris (ony ýörite sahypada saklaýarys - 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();
}
Üýtgeşik zat ýok - mainwe start()programmany işe girizýän:
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();
        }
    }
Şeýlelikde, bu ýerde hakykatdanam başlaýan usulymyzy start(), ýagny esasy penjirämiziň sazlamalaryny kesgitleýän usuly görýäris. Resurslardaky xml düzülişi ýaly: oňa nyşan bermek, belli bir gözegçilik ediji bilen baglanyşdyrmak we kontrolleýere synpa baglanyşyk bermek 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();
        }
    }
}
Bu ýerde ikinji penjiräniň peýda bolmagy üçin jogapkär usuly - täze ýazgy döretmek üçin penjire (täze itiň ady) görýäris. Şeýle hem kontrolleýeri, xml düzülişini, basgançagyny we ş.m. goýduk ... Geljekki synpymyz itimizi görkezýän model bolar (bu hakda maglumat): @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;
    }
}
Bu ýerde iki sany konstruktory görýäris. Biri ähli argumentler bilen adaty bir zat (ýönekeý görnüşdäki ýörite FX örtükleri ulanýarys diýen ýaly) we argumentsiz konstruktor: başda diňe a bolan täze it döredenimizde ulanýarys. ady. Esasy penjire üçin dolandyryjy: @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;
Bu ýerde obýekt meýdanlarymyzy görýäris, ýöne TextField görnüşinde. Bu, tekst giriziş meýdanyny görkezýän format. @FXML Java koduny we ýerleşişimiziň degişli obýektini (düwme, meýdan ýa-da başga bir zat) baglanyşdyrmak üçin döredilen düşündirişdir.
@FXML
private void initialize() {
    nameList.setCellValueFactory(
            cellData -> cellData.getValue().getName());
    dogs.getSelectionModel().selectedItemProperty().addListener(
            (observable, oldValue, newValue) -> showDogsInformation(newValue));
}
Bu ýerde sanawyň sag tarapynda itleriň atlaryny görkezmegiň usulyny görýäris (onuň @FXML düşündirişi JavaFX TableView düzüliş komponentine bagly).
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("");
    }
}
Birinji usulda, Programmany amala aşyrýan synpyň içerki salgylanmasyny (ikinji penjire jaň etmek usulyny atlandyryp bileris) we görkezilmeli başlangyç sanawy kesgitleýäris. Ikinjisi, häzirki itiň belli bir maglumatlarynyň bardygyny ýa-da ýokdugyny barlaýar we şoňa esaslanyp tekst meýdanlaryny düzýär:
@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);
        }
    }
}
Bu ýerde düwmeler bilen baglanyşykly esasy penjiräniň üç usulyny görýäris: Java FX bilen tanyşlyk - 12
  • ýok etmek - saýlanan (saýlanan) iti indeks boýunça pozuň;
  • redaktirlemek - geçirilen maglumatlar bilen täze it dörediň we öňküsiniň ýerine goýuň;
  • dörediň - täze it döredýäris we dörediş penjiresine jaň etmegiň usulyna jaň edýäris, täze bir obýektden geçýäris we ýapylansoň, ady ýok bolsa, täze haýwany saklaň.
Iti döretmek üçin penjire gözegçisi: @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();
    }
}
Bu ýerde penjiräniň tekst meýdançasy bilen baglanyşygy görýäris, penjiräni nädip ýapýan Saklamak we elatyr düwmelerini gaýtadan işleýäris. Görşüňiz ýaly, kiçijik programmamda has amatly bolmagy üçin Lombok ulanýardym, ýogsam kod gaty öserdi we gözden geçirişime laýyk bolmazdy. Bu gün meniň üçin bar zat bolsa gerek. Bu gün esasy düşünjeler we JavaFX ulanmagyň mysaly bilen gysgaça tanyşdyk we kiçi iş stoly programmalaryny gurup bileris (goşmaça maglumat ulanyp, bagtymyza internetde köp). Siz bolsa öz gezegiňizde)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION