不要使用setGridLinesVisible(true): documentation明确声明这仅用于调试.
而是将窗格放在所有网格单元格中(甚至是空格子单元格),并设置窗格样式以便您看到边框. (这使您有机会非常小心地控制边框,因此可以避免双边框等.)然后将内容添加到每个窗格.您还可以使用窗格注册鼠标侦听器,这意味着您无需进行丑陋的数学计算以确定单击了哪个单元格.
将边框应用于任何区域的推荐方法是使用CSS和“嵌套背景”方法.在此方法中,您在区域上绘制两个(或更多)背景填充,使用不同的插入,给出边框的外观.例如:
-fx-background-fill: black, white ;
-fx-background-insets: 0, 1 ;
将首先绘制一个没有插图的黑色背景,然后在其上绘制一个白色背景,所有侧面都有1个像素的插图,给出宽度为1像素的黑色边框的外观.虽然这可能看起来有点违反直觉,但这种表现(据称)比直接指定边界要好.您还可以为每个填充的insets指定四个值的序列,这些值分别被解释为顶部,右侧,底部和左侧的插入.所以
-fx-background-fill: black, white ;
-fx-background-insets: 0, 0 1 1 0 ;
在右侧和底部等具有黑色边框的效果.
我也不确定SubScene是你真正想要的,除非你打算将不同的相机连接到每个单元.如果您确实需要子场景,请使填充透明以避免绘制单元格的边缘.您可以直接将组添加到每个单元格(您可能只需添加圆圈,具体取决于您需要的…).
就像是:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import java