问题描述
我试图根据 GridPane 的列和行找出鼠标的位置。我知道鼠标的位置,所以如果我知道每个单元格的宽度和高度(我没有看到一个简单的方法来计算),我大概可以从中找出来,但我看到的大部分代码似乎都假设鼠标位于 GridPane 内的一个节点上:
Node node = (Node) event.getTarget();
int row = GridPane.getRowIndex(node);
int column = GridPane.getColumnIndex(node);
但实际上我的 GridPane 里面没有任何东西,所以我只得到了整个 GridPane。现在,我想我可以为每个单元格添加节点,但这似乎效率低下。 (这个想法是用户将节点放置在网格中,所以网格开始时是空的。)
编辑:澄清一下,当您将 GridPane 向下放置然后在其上拖动组件时,我基本上想做 SceneBuilder 所做的事情。您悬停在其上的单元格会突出显示,然后(如果您放下组件)它会被添加到该单元格中。所以我知道这是可能的(而且作为一个概念也不奇怪)。
有什么想法吗?
解决方法
这并不能完全回答我的问题,但它对我短期有用,对其他人可能有用。它仅在被查询的维度上的单元格是统一的(即宽度/高度都相同)时起作用。
public int getCoord(double width,double coord,int numberOfSections) {
long dim = Math.round(width / numberOfSections);
long border = dim;
int val = 0;
while(coord > border) {
border += dim;
val++;
}
return val;
}
缺乏直接迭代行和列的当前状态的方法,我认为完整的解决方案需要对子项(如果有)以及行和列约束进行分析。