【发布时间】:2018-01-28 15:56:14
【问题描述】:
我有一个 JavaFX 应用程序,它首先计算一些数据,然后在 LineChart 上添加数据点。我想在节点上添加一个 ClickListener,如果用户单击图表上的任何节点,相应的值将出现在 TableView 或其他内容中。但我无法检索节点的值。
代码如下:
lineChart.getData().add(series);
series.getNode().setOnMouseClicked(nodeClicked);
EventListener 的代码:
EventHandler<MouseEvent> nodeClicked = new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
System.out.println("clicked");
}
};
我也尝试在 LineChart 上设置监听器,但在事件对象中找不到相应的节点信息,如值等。
提前谢谢你,最好的问候
【问题讨论】:
-
这应该为 series 的节点添加一个监听器(即构成折线图的线)。这是您想要的,还是您想要在节点上为各个数据点设置一个侦听器?
-
@James_D 没错,我想在每个数据点上都有一个监听器,所以如果你点击图表上的一个点,你应该得到那个数据点的值。
-
因此您需要从实际的
XYChart.Data对象中获取每个节点,并为这些对象添加监听器。 -
@James_D 但是怎么做呢?首先,我使用 x 和 y 的 2 个值创建一个 XYChart.Data 对象。之后我将它们添加到系列中,最后将系列添加到 LineChart。如果我在直接声明数据对象后尝试设置监听器,我会得到一个 NullPointerException。
-
好吧,没有人能告诉你他们看不到的代码有什么问题。我最好的猜测是,您在将数据添加到图表之前从数据中检索节点(在将数据添加到图表之前不会创建节点)。但是大概你可以从堆栈跟踪中找出实际上是什么是空的......?
标签: java user-interface javafx linechart