当前位置: 首页 > 知识库问答 >
问题:

带有文本字段和复选框的动态网格窗格

酆恩
2023-03-14

我正在做一个项目,其中有两个选项卡。在first Tab的用户界面上有一个文本字段和一个按钮。在文本字段中,用户可以写到100之前的任何数字,当他按下按钮Next时,我的应用程序将转到下一个选项卡,在该选项卡上有一个带有三列a、B和C的Gridpane。

所以我想要的是用户将在第一个选项卡的文本字段中输入的任何数字,根据该数字,它应该在第二个选项卡的GridPane中添加相同数量的Textfields、CheckBoxs和Datepicker行。

使用SceneBuilder可以很容易地创建固定大小的Gridpane,然后在其中添加元素并给它们fx:id,但动态地,这很复杂,因为我必须给每个文本字段、复选框和Datepicker分配fx:id,以便检索数据并将其发送到DB。

我应该使用Gridpane还是有任何其他解决方案来实现目标。如果有人能指导我需要做什么,那将是很大的帮助。

共有1个答案

卫甫
2023-03-14

不能在fxml文件中使用循环日志。但是,您可以实现一些逻辑来添加指定数量的行。可以使用 元素为各个行创建fxml文件:

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

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.text.Text?>

<GridPane fx:id="root" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxml.grid.MainController">
    <children>
        <Text text="A"/>
        <Text text="B" GridPane.columnIndex="1"/>
        <Text text="C" GridPane.columnIndex="2"/>
    </children>
</GridPane>
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.DatePicker?>

<fx:root type="javafx.scene.layout.GridPane" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxml.grid.SubController">
    <children>
        <TextField fx:id="text" GridPane.columnIndex="0" GridPane.rowIndex="$rowIndex" />
        <CheckBox fx:id="checkBox" GridPane.columnIndex="1" GridPane.rowIndex="$rowIndex" />
        <DatePicker fx:id="datePicker" GridPane.columnIndex="2" GridPane.rowIndex="$rowIndex" />
    </children>
</fx:root>
public class MainController {

    @FXML
    private GridPane root;

    private final List<SubController> subControllers = new ArrayList<>();

    public void setRowNumber(int rows) throws IOException {
        if (rows < subControllers.size()) {
            // for simplicity only allow the number of rows to grow
            throw new IllegalArgumentException();
        }
        for (int i = subControllers.size(); i < rows; i++) {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("sub.fxml"));

            // add rowIndex to be used from fxml using $rowIndex
            loader.getNamespace().put("rowIndex", subControllers.size() + 1);

            loader.setRoot(root);
            loader.load();
            subControllers.add(loader.getController());
        }
    }

}
public class SubController {
    @FXML
    private TextField text;
    @FXML
    private CheckBox checkBox;
    @FXML
    private DatePicker datePicker;

}
int num = 6;
FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
Parent parent = loader.load();
loader.<MainController>getController().setRowNumber(num);

向控制器中添加方法以访问单个元素应该不会太难。

请注意,tableview也值得一看。

 类似资料:
  • 我将cell factory用于listview,并带有如下复选框: 它很好,但不是所有情况下。案例:当我说超过10个条目时,滚动窗格就出现了。假设我有位于8或9索引的beanChoices要检查(您必须滚动才能查看它们)。 对于不可见的项(位于scrollpane下)不调用监听器。 在调试时,我发现向下滚动时调用监听器。 问题:当我在上面的情况下从beanChoices中得到选中的值时,它返回空

  • 我在Spring MVC(4.1.1)中使用了Thymeleaf(Tymeleaf-Spring4-2.1.3),并有一个模型/命令对象,如下所示: Thymeleaf如何确定必须生成隐藏字段? 即使我将属性更改为 这里相同:没有隐藏字段。

  • 如何使窗格(内部包含元素)可滚动? 在FXML文件中,我放了一个ScrollPane,我希望它是可滚动的窗格。正确吗?还是我错了? 滚动ane.set内容(窗格);

  • 当网格单元中的复选框更改其状态时,我需要更新存储:从存储中添加或删除值。如何处理此事件?顺便说一句,我用以下方式在网格中创建复选框: UPD2:现在我执行以下操作:按照最初的决定创建复选框: 而不是像这样处理网格中的事件:UPD3: 这是正确的方法。

  • 问题内容: 我需要将复选框添加到JTree。自定义TreeCellRenderer / TreeCellEditor似乎是正确的方法。到目前为止,我在此网页中使用了CheckBoxNodeRenderer方法。除了两件事,它可以正常工作: 复选框上方+下方有额外的空格;我想使其与常规JTree相同。 我想区分单击复选框本身(应尝试切换复选框)和单击与复选框相关联的文本(应允许事件侦听器将此解释为单

  • 问题内容: 是否可以将复选框代替“链接名称”? 如果是这样怎么办? 谢谢, 问题答案: 是的,当然有可能。您可以使用标准复选框: 然后在单独的javascript文件中使用jQuery订阅此复选框的change事件,并毫不客气地对其进行AJAXify: