你好,所以我尝试了许多在线解决方案,如何获得在网格窗格中点击的节点(单元格)。我使用的获取节点的方法如下所示。我也尝试过迭代这个方法之前的所有节点。我已经用场景构建器构建了网格,正如你在下面的图片中看到的,列和行都清楚地存在。我正在尝试这个解决方案如何在鼠标上获得网格窗格行和列ID在JavaFX网格的每个单元格中输入?但是,正如我上面提到的,从行和列返回的值是null。
@FXML
private void mouseEntered(MouseEvent e) {
Node source = (Node)e.getSource() ;
System.out.println(source);
Integer colIndex = userSelectionGrid.getColumnIndex(source);
Integer rowIndex = userSelectionGrid.getRowIndex(source);
if (colIndex == null && rowIndex == null) System.out.println("BOO");
else
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex.intValue(), rowIndex.intValue());
}
包含此网格的FXML
<GridPane fx:id="userSelectionGrid" onMouseClicked="#mouseEntered" prefHeight="44.0" prefWidth="563.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="SAVE" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="0">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Label text="CANCEL" GridPane.columnIndex="0" GridPane.halignment="CENTER" GridPane.rowIndex="0">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Separator orientation="VERTICAL" GridPane.columnIndex="1" />
</children>
<VBox.margin>
<Insets />
</VBox.margin>
</GridPane>
事件源是添加处理程序的节点,即在本例中是
网格窗格
。您可以将处理程序添加到GridPane
的子级,以确保源节点的正确性:
<GridPane fx:id="userSelectionGrid" prefHeight="44.0" prefWidth="563.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="SAVE" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="0" onMouseClicked="#mouseEntered">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Label text="CANCEL" GridPane.columnIndex="0" GridPane.halignment="CENTER" GridPane.rowIndex="0" onMouseClicked="#mouseEntered">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Separator orientation="VERTICAL" GridPane.columnIndex="1" />
</children>
<VBox.margin>
<Insets />
</VBox.margin>
</GridPane>
请注意,您也可以使用原始的fxml进行此工作。然而,有几件事你应该考虑:
>
if (colIndex == null && rowIndex == null)
过于强大,无法阻止其他部分中的
NullPointerExc农田
。这可能发生,例如,如果分隔符
被单击。
@FXML
private void mouseEntered(MouseEvent e) {
Node target = (Node) e.getTarget();
// traverse towards root until userSelectionGrid is the parent node
if (target != userSelectionGrid) {
Node parent;
while ((parent = target.getParent()) != userSelectionGrid) {
target = parent;
}
}
Integer colIndex = userSelectionGrid.getColumnIndex(target);
Integer rowIndex = userSelectionGrid.getRowIndex(target);
if (colIndex == null || rowIndex == null) {
System.out.println("BOO");
} else {
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex.intValue(), rowIndex.intValue());
}
}
请注意,
标签
s不会填充整个网格窗格
,除非您将首选大小设置为大于网格窗格
约束。这会弄乱网格窗格的布局。解决方法是将
区域
s放置在单元格中标签
s的后面。可以使用单元格调整这些节点的大小,而不会影响网格窗格
布局,这样可以捕获这些节点上的事件:
<GridPane fx:id="userSelectionGrid" prefHeight="44.0" prefWidth="563.0" onMouseClicked="#mouseEntered">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" fillWidth="true" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" fillWidth="true" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" vgrow="SOMETIMES" fillHeight="true" />
</rowConstraints>
<children>
<Region GridPane.columnIndex="1" GridPane.rowIndex="0"/>
<Region GridPane.columnIndex="0" GridPane.rowIndex="0"/>
<Label text="SAVE" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="0">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Label text="CANCEL" GridPane.columnIndex="0" GridPane.halignment="CENTER" GridPane.rowIndex="0">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
<Separator orientation="VERTICAL" GridPane.columnIndex="1" />
</children>
<VBox.margin>
<Insets />
</VBox.margin>
</GridPane>
如何在JavaFX的网格窗格中获取列索引和行索引。请参见下面的代码 当鼠标在text1上输入时,我想获取GridPane的列索引和行索引 请让我知道。
当我单击时,我尝试获取gridpane的行/列索引。 我在JTable(java swing)中寻找像getSelectedColumn()这样的方法 我搜索了这个。gridPane.getRowIndex(节点) 但这对我没有帮助。因为它需要节点名来获取行/列索引。 我通过语法制作了一个网格组件。所以节点名称是相同的。如何获取值?我的部分代码在下面。
问题内容: 可以说我有一个MultiIndex系列: 我想应用一个使用行索引的函数: 我该怎么做?进行此类操作的推荐方法是什么?我希望获得一个新的Series,并将此函数所产生的值应用于每行并具有相同的MultiIndex。 问题答案: 我认为无法访问该索引;它将每行视为一个numpy对象,而不是一个Series,如您所见: 要解决此限制,请将索引提升为列,应用函数,然后使用原始索引重新创建Ser
本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是
本文向大家介绍在SAP中查找行和列的索引,包括了在SAP中查找行和列的索引的使用技巧和注意事项,需要的朋友参考一下 要标识行的索引,可以使用属性“ indexOfRow”来获取单击按钮的行。 所有按钮都将在同一列中,因此获取列索引没有意义,但是如果您仍然需要获取列索引,则可以继续使用属性“ indexOfColumn”或“ columnIndex”。
问题内容: 对于这个有争议的问题,我无法得到明确的答案。 MSDN文档中提到 聚类 聚集索引根据它们的键值对数据行进行 排序 并将其存储在表或视图中。这些是索引定义中包括的列。只能有一个每个表的聚集索引,因为数据行本身可以 进行排序 在只有一个订单。 表中的数据行唯一 按排序 顺序存储的时间是表包含聚簇索引时。当表具有聚簇索引时,该表称为聚簇表。如果表没有聚集索引,则其数据行将存储在称为堆的无序结