我有一些代码可以根据 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);
}
});
有效解决了,但是原来的问题关于如何找到鼠标下的节点仍然是一个谜。