我有这些代码,用于从数据采集器中提取数据采集器皮肤,并将其放置在一个锚窗格中。它运行良好,但我的问题是,我如何从它的价值?比方说,当你点击一个像8这样的数字,得到一个日期的值,就像数据报器本身一样?这是我的代码: zig8是主链。
DatePickerSkin datePickerSkin = new DatePickerSkin(new DatePicker(LocalDate.now()));
Region pop = (Region)datePickerSkin.getPopupContent();
pop.setPrefHeight(zig8.getPrefHeight());
pop.setPrefWidth(zig8.getPrefWidth());
zig8.getChildren().add(pop);我试图以这种方式附加鼠标事件:
pop.addEventHandler(MouseEvent.MOUSE_CLICKED,(e)->
{
//a code to get the value.
});谢谢..。
发布于 2016-08-30 14:48:36
这可能不是很节省,每次DatePicker更新时都会中断。但让我们假设这种情况不会发生:)
如果您查看DatePicker的代码,您可以看到它的结构大致如下:
因此,我们可以编写一个函数来搜索DatePicker的内容并查找所有的DateCells。由于它们被重复使用,我们只需要这样做一次。然后,我们可以向每个DateCell附加一个事件侦听器。
...
List<DateCell> dateCells = getAllDateCells(pop);
DatePickerSkin datePickerSkin = new DatePickerSkin(new DatePicker(LocalDate.now()));
DatePickerContent pop = (DatePickerContent)datePickerSkin.getPopupContent();
pop.setPrefHeight(zig8.getPrefHeight());
pop.setPrefWidth(zig8.getPrefWidth());
zig8.getChildren().add(pop);
List<DateCell> dateCells = getAllDateCells(pop);
for (DateCell cell : dateCells)
{
cell.addEventHandler(
MouseEvent.MOUSE_PRESSED,(e)->
{
System.out.println("Mouse clicked :" + cell.getItem());
}
);
}
...
private static List<DateCell> getAllDateCells(DatePickerContent content)
{
List<DateCell> result = new ArrayList<>();
for (Node n : content.getChildren())
{
System.out.println("node " + n + n.getClass());
if (n instanceof GridPane)
{
GridPane grid = (GridPane) n;
for (Node gChild : grid.getChildren())
{
System.out.println("grid node: " + gChild + gChild.getClass());
if (gChild instanceof DateCell)
{
result.add((DateCell) gChild);
}
}
}
}
return result;
} 因为DateCell是从Cell<>派生的,所以它知道它的当前日期,我们可以使用getItem来计算日期。
Alternative:您可能可以通过使用反射访问DatePickerContent中的受保护的DateCell列表。
protected List<DateCell> dayCells = new ArrayList<DateCell>();https://stackoverflow.com/questions/39207507
复制相似问题