标签未显示在鼠标事件JavaFx上
我有一个饼图,其中我使用以下指南添加了鼠标侦听器: 然而,当我运行程序并点击图表时,它什么也不做 我尝试了System.out.println(caption.getText());标签上的文字是正确的,但是标签没有显示出来 我的代码如下:标签未显示在鼠标事件JavaFx上,java,mouseevent,javafx,pie-chart,Java,Mouseevent,Javafx,Pie Chart,我有一个饼图,其中我使用以下指南添加了鼠标侦听器: 然而,当我运行程序并点击图表时,它什么也不做 我尝试了System.out.println(caption.getText());标签上的文字是正确的,但是标签没有显示出来 我的代码如下: public void start(Stage stage) { Scene scene = new Scene(new Group()); stage.setTitle("Imported Fruits");
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Imported Fruits");
stage.setWidth(500);
stage.setHeight(500);
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
final PieChart chart = new PieChart(pieChartData);
chart.setTitle("Imported Fruits");
((Group) scene.getRoot()).getChildren().add(chart);
final Label caption = new Label("");
caption.setTextFill(Color.DARKORANGE);
caption.setStyle("-fx-font: 24 arial;");
for (final PieChart.Data data : chart.getData()) {
data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent e) {
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue()) + "%");
caption.setVisible(true);
}
});
}
stage.setScene(scene);
stage.show();
}
}
公共作废开始(阶段){
场景=新场景(新组());
阶段.设定名称(“进口水果”);
舞台设置宽度(500);
舞台设置高度(500);
可观测数据=
FXCollections.observableArrayList(
新PieChart.数据(“葡萄柚”,13),
新PieChart.数据(“橙子”,25),
新PieChart.数据(“李子”,10),
新PieChart.数据(“Pears”,22),
新PieChart.数据(“苹果”,30);
最终PieChart图表=新PieChart(PieChart数据);
图表.setTitle(“进口水果”);
((组)scene.getRoot()).getChildren().add(图表);
最终标签标题=新标签(“”);
标题.setTextFill(Color.DARKORANGE);
标题.setStyle(“-fx字体:24 arial;”);
对于(最终PieChart.Data:chart.getData()){
data.getNode().addEventHandler(按下MouseEvent.MOUSE_,
新的EventHandler(){
@重写公共无效句柄(MouseEvent e){
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue())+“%”;
caption.setVisible(true);
}
});
}
舞台场景;
stage.show();
}
}
有人能告诉我我做错了什么吗?您忘记在根节点的子节点列表中添加标签“caption:-)
公共作废开始(阶段){
场景=新场景(新组());
阶段.设定名称(“进口水果”);
舞台设置宽度(500);
舞台设置高度(500);
可观测数据=
FXCollections.observableArrayList(
新PieChart.数据(“葡萄柚”,13),
新PieChart.数据(“橙子”,25),
新PieChart.数据(“李子”,10),
新PieChart.数据(“Pears”,22),
新PieChart.数据(“苹果”,30);
最终PieChart图表=新PieChart(PieChart数据);
图表.setTitle(“进口水果”);
最终ObservableList children=((组)scene.getRoot()).getChildren();
添加(图表);
最终标签标题=新标签(“”);
标题.setTextFill(Color.DARKORANGE);
标题.setStyle(“-fx字体:24 arial;”);
添加(标题);
对于(最终PieChart.Data:chart.getData()){
data.getNode().addEventHandler(按下MouseEvent.MOUSE_,
新的EventHandler(){
@重写公共无效句柄(MouseEvent e){
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue())+“%”;
caption.setVisible(true);
}
});
}
舞台场景;
stage.show();
}
我已经做了上述更改,可以验证它是否有效(如下图所示)
无需这样做,您只需添加标题,如下所示: 更改此行:((组)scene.getRoot()).getChildren().addAll(图表); 到:((组)scene.getRoot()).getChildren().addAll(图表,标题)
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Imported Fruits");
stage.setWidth(500);
stage.setHeight(500);
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
final PieChart chart = new PieChart(pieChartData);
chart.setTitle("Imported Fruits");
final ObservableList<Node> children = ((Group) scene.getRoot()).getChildren();
children.add(chart);
final Label caption = new Label("");
caption.setTextFill(Color.DARKORANGE);
caption.setStyle("-fx-font: 24 arial;");
children.add(caption);
for (final PieChart.Data data : chart.getData()) {
data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent e) {
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());
caption.setText(String.valueOf(data.getPieValue()) + "%");
caption.setVisible(true);
}
});
}
stage.setScene(scene);
stage.show();
}