Как добавить элементы JavaFX с помощью al oop? - PullRequest
0 голосов
/ 13 марта 2020

Я создаю мини-социальные сети с JavaFX и SQL, где пользователи могут создавать сообщения. У меня есть каждый пост в элементе Pane, который включает имя пользователя, дату поста и текст в посте. Я хотел бы создать al oop, который вставляет как можно больше сообщений. Мне просто нужно знать, как я могу создать al oop, который вставляет для примера 5 одинаковых элементов панели. Я пишу свой код в файле af xml. У меня также есть контроллер, где я могу писать функции. Я не могу написать java код в файле f xml, где есть элементы javafx, поэтому мне нужно как-то вставить элементы панели через al oop в контроллер.

Пример кода: Я не написал код, я просто спрашиваю, какой подход я должен использовать. Вот как будет выглядеть код:

<AnchorPane id="AnchorPane">
    <VBox layoutY="170.0" prefWidth="557.0">
        // Start Loop
          <Pane>
             <children>
                  <Label text="Test Person" />
                <Label text="Date of Post" />
                <TextArea text="Text in Post"/>
             </children>
          </Pane>
       // End Loop
    </VBox>
</AnchorPane>

Вот изображение того, как выглядят сообщения:

enter image description here

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Пример:

String template = "" +
            "<AnchorPane id=\"AnchorPane\">\n" +
            "    <VBox layoutY=\"170.0\" prefWidth=\"557.0\">\n" +
            "        // Start Loop\n" +
            "          <Pane>\n" +
            "             <children>\n" +
            "                  <Label text=\"%text person%\" />\n" +
            "                <Label text=\"%date of post%\" />\n" +
            "                <TextArea text=\"%text in post%\"/>\n" +
            "             </children>\n" +
            "          </Pane>\n" +
            "       // End Loop\n" +
            "    </VBox>\n" +
            "</AnchorPane>";

    StringBuilder sb = new StringBuilder();
    //Loop through the posts
    for (int i = 0; i<postNumber; i++) {
        sb.append(
                template
                        .replaceAll("%text person%", thePerson)
                        .replaceAll("%date of post%", theDate)
                        .replaceAll("%text in post%", text));
    }
    String outer =
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "\n" +
            "<?import java.lang.*?>\n" +
            "<?import java.util.*?>\n" +
            "<?import javafx.scene.*?>\n" +
            "<?import javafx.scene.control.*?>\n" +
            "<?import javafx.scene.layout.*?>\n" +
            "\n" +
            "<AnchorPane xmlns=\"http://javafx.com/javafx\"\n" +
            "            xmlns:fx=\"http://javafx.com/fxml\"\n" +
            "            fx:controller=\"me.mkdomain.deeplearning.D\"\n" +
            "            prefHeight=\"400.0\" prefWidth=\"600.0\">\n" +
            "%content%\n" +
            "</AnchorPane>";
    String done = outer.replaceAll("%content%", sb.toString());
    FileOutputStream out = new FileOutputStream("myfile.fxml");
    out.write(done.getBytes());
    out.close();
    FXMLLoader loader = new FXMLLoader();
    loader.load(new FileInputStream("myfile.fxml"));
0 голосов
/ 14 марта 2020

Вы можете использовать StringBuilder для создания f xml. Затем вы можете записать его во временный файл и затем загрузить.

...