JavaFX Dynamic Edit View DAO - PullRequest
       1

JavaFX Dynamic Edit View DAO

0 голосов
/ 14 декабря 2018

Я пытаюсь спроектировать пользовательский интерфейс приложения максимально динамично, поэтому при создании нового DAO не должно быть большого количества кода, необходимого для отображения DAO в пользовательском интерфейсе.До сих пор я создал аннотацию для отображения DAO в TableView.Это работает очень хорошо.

Теперь я хочу создать динамическое представление для редактирования / создания нового экземпляра DAO.Мой план заключается в том, что мне нужно только создать FXML, в то время как значение Components внутри него автоматически заполняется свойствами внутри DAO.

Каков наилучший метод для достижения этой цели?

ВотПример:

Страна

public class Country extends DatabaseItem
{
    private String name;
    private String shortage;
    private String flagPath;

    private ImageView flag = null;

    public Country()
    {

    }
    [.. Getters/Setters ..]
}

Цель

enter image description here

FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>

<BorderPane fx:id="bPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="177.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <GridPane fx:id="gPane" BorderPane.alignment="CENTER">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="294.0" minWidth="10.0" prefWidth="150.0" />
          <ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="10.0" prefWidth="450.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>
         <children>
            <Label fx:id="lblCountryName" text="Ländername:" />
            <Label fx:id="lblCountryShortage" text="Abkürzung:" GridPane.rowIndex="1" />
            <Label fx:id="lblCountryFlag" text="Flaggen-Symbol:" GridPane.rowIndex="2" />
            <TextField fx:id="txtCountryName" GridPane.columnIndex="1" />
            <TextField fx:id="txtCountryShortage" GridPane.columnIndex="1" GridPane.rowIndex="1" />
            <BorderPane fx:id="bPaneFlag" prefHeight="200.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
               <center>
                  <TextField fx:id="txtCountryFlag" BorderPane.alignment="CENTER">
                     <BorderPane.margin>
                        <Insets right="5.0" />
                     </BorderPane.margin>
                  </TextField>
               </center>
               <right>
                  <Button fx:id="btnCountryFlag" mnemonicParsing="false" onAction="#btnCountryFlagClicked" text="..." BorderPane.alignment="CENTER" />
               </right>
               <left>
                  <ImageView fx:id="imgViewCountryFlag" fitHeight="48.0" fitWidth="90.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER">
                     <BorderPane.margin>
                        <Insets right="5.0" />
                     </BorderPane.margin>
                  </ImageView>
               </left>
               <opaqueInsets>
                  <Insets />
               </opaqueInsets>
            </BorderPane>
            <ButtonBar fx:id="btnBar" prefHeight="40.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
              <buttons>
                <Button fx:id="btnAbort" mnemonicParsing="false" onAction="#btnAbortClicked" text="Abbrechen" />
                  <Button fx:id="btnSave" mnemonicParsing="false" onAction="#btnSaveClicked" text="Speichern" />
              </buttons>
            </ButtonBar>
         </children>
         <padding>
            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
         </padding>
      </GridPane>
   </center>
</BorderPane>

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете добавить контроллер, который принимает экземпляр Countrey (модель), к вашему fxml.Очень упрощенная версия может выглядеть так:

public class Controller {

    @FXML
    TextField txtCountryName, txtCountryShortage, txtCountryFlag;

    public void setModel (final Country countrey){
        txtCountryName.setText(countrey.getName());
        txtCountryShortage.setText(countrey.getID());
        txtCountryFlag.setText(countrey.getFlagPath());
    }
}

И установить модель при инициализации:

      FXMLLoader loader = new FXMLLoader();
      Parent root  =  loader.load(getClass().getResource("Main.fxml").openStream());
      Controller controller = (Controller)loader.getController();
      controller.setModel(new Country("Germany","DE","https://cdn3.iconfinder.com/data/icons/world-flags-square-vol-2/48/Germany-512.png"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...