我有一些代码可以根据 TreeTableView 中的 TreeTableRow 生成二维码。我使用以下代码在树表上附加了一个工具提示。工具提示运行良好,将鼠标悬停在行上时将显示“Hello World”二维码。但是,图像需要动态生成。
img 使用 io.nayuki.qrcodegen 生成如下,愿它们永远存在。
QrCode qr0 = QrCode.encodeText("Hello, world!", QrCode.Ecc.MEDIUM);
BufferedImage img = toImage(qr0, 2, 1, 0xFFFFFF,0x000000);
Tooltip tp = new Tooltip();
Tooltip.install(treeTableView, tp);
tp.setOnShowing(ev -> {// called just prior to being shown Point mouse = java.awt.MouseInfo.getPointerInfo().getLocation();
Point2D local = treeTableView.screenToLocal(mouse.x, mouse.y);
ImageView iv1 = new ImageView();
iv1.setImage(SwingFXUtils.toFXImage(img, null));
tp.setGraphic(iv1);
});
除了谷歌搜索/搜索短语“Javafx 在鼠标下找到节点”之外,没有太多内容。
从那时起,我找到了一种解决方法,即使用行工厂并将当前行存储在全局变量 hoverRow 中。
row.setOnMouseEntered(event->{
StockBinsTree.this.hoverRow=row;
});
row.setOnMouseExited(event->{
StockBinsTree.this.hoverRow=null;
});
修改工具提示如下:
tp.setOnShowing(ev -> {// called just prior to being shown if(hoverRow!=null) {
StockBin sbItem = hoverRow.getItem();
QrCode qr0 = QrCode.encodeText(sbItem.toLink(), QrCode.Ecc.HIGH);
BufferedImage img = toImage(qr0, 2, 2, 0xFFFFFF,0x000000); // See QrCodeGeneratorDemo ImageView iv1 = new ImageView();
iv1.setImage(SwingFXUtils.toFXImage(img, null));
tp.setGraphic(iv1);
}
});
有效解决了,但是原来的问题关于如何找到鼠标下的节点仍然是一个谜。
假设你的问题是:
您可以从鼠标事件目标中确定当前拾取的节点,或者拾取结果 相交的节点。
例子
在示例中,文本将发生变化,以指示当前鼠标位置下的节点。
事件过滤器会监控场景中的鼠标移动,并在属性中记录当前选中(或目标)的节点。订阅该属性将更新场景中的文本,并将选中节点的历史记录记录到控制台。
由于鼠标监听器是针对场景中的鼠标移动设置的,因此,如果鼠标离开场景,当前拾取的节点将保持为最后拾取的节点。
WheresTheMouseAtApp.java
PickRecorder.java