如何添加带有循环的JavaFX元素?
我正在使用JavaFX和SQL创建一个小型社交媒体,用户可以在其中创建帖子。我将每篇文章放在一个窗格元素中,其中包括用户的姓名、文章的日期和文章中的文本。我想创建一个循环,插入存在的任意多个帖子。我只需要知道,如何创建一个循环,为示例5插入相同的窗格元素。 我正在fxml文件中编写代码。我也有一个控制器,我可以写函数。 我无法在存在javafx元素的fxml文件中编写java代码,因此我需要通过控制器中的循环插入pane元素 代码示例: 我没有写代码,我只是问我应该采取什么方法。 下面是代码的样子:如何添加带有循环的JavaFX元素?,java,loops,javafx,fxml,scenebuilder,Java,Loops,Javafx,Fxml,Scenebuilder,我正在使用JavaFX和SQL创建一个小型社交媒体,用户可以在其中创建帖子。我将每篇文章放在一个窗格元素中,其中包括用户的姓名、文章的日期和文章中的文本。我想创建一个循环,插入存在的任意多个帖子。我只需要知道,如何创建一个循环,为示例5插入相同的窗格元素。 我正在fxml文件中编写代码。我也有一个控制器,我可以写函数。 我无法在存在javafx元素的fxml文件中编写java代码,因此我需要通过控制器中的循环插入pane元素 代码示例: 我没有写代码,我只是问我应该采取什么方法。 下面是代码的样
<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>
您可以使用StringBuilder创建fxml。然后,您可以将其写入临时文件,然后加载它。示例:
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"));
String template=“”+
“\n”+
“\n”+
“//开始循环\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“//结束循环\n”+
“\n”+
"";
StringBuilder sb=新的StringBuilder();
//在柱子上绕圈子
对于(int i=0;i您需要发布您的代码。请..您可能需要使用ListView
,让每个ListCell
处理显示其项目的操作(即使用自定义单元格实现,将您的发布视图设置为单元格的图形)。然后您只需添加所有发布(由模型类表示)到列表视图的项
。@akuzminykhI我还没有写代码,我只是问我应该采取什么方法。我已经画出了代码的样子,上面已经更新:)当然,core JavaFX允许您使用自定义单元格,这是虚拟化控件的主要功能之一(即ListView
、TableView
、TreeTableView
和TreeView
)。创建ListView
并设置其cellFactory
属性。您能澄清一下吗?我找不到任何关于这方面的教程。如果您想添加更多信息,您可以并且应该编辑原始答案。