JavaFX PieChart 工具提示尽管已安装但未显示
JavaFX PieChart Tooltip not showing despite being installed
我尝试为饼图的每个 "slice" 显示工具提示,类似于 chart.js:
我发现 this answer 基本上是在同一框架中尝试实现相同的目标。它有两个赞成票,并且根据其他(已接受的)答案判断,其他图表类型似乎也适用。但是,从没有显示工具提示的意义上说,代码对我来说真的不起作用。
显示问题的示例代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane pane = new BorderPane();
PieChart chart = new PieChart();
Button randomValues = new Button();
randomValues.setOnAction(ae -> {
chart.getData().clear();
List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
chart.getData().addAll(data);
});
pane.setCenter(chart);
pane.setBottom(randomValues);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
private List<Integer> randomValues() {
return new Random().ints(5).boxed().collect(Collectors.toList());
}
public static void main(String[] args) {
launch(args);
}
}
我预计会有一个类似于图片的弹出窗口,但实际上什么也没有显示。非常感谢任何帮助!
我只是感动
chart.getData().addAll(data);
以上
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
完整代码:
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application
{
@Override
public void start(Stage primaryStage)
{
BorderPane pane = new BorderPane();
PieChart chart = new PieChart();
Button randomValues = new Button();
randomValues.setOnAction(ae -> {
chart.getData().clear();
List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
chart.getData().addAll(data);
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
});
pane.setCenter(chart);
pane.setBottom(randomValues);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
private List<Integer> randomValues()
{
return new Random().ints(5).boxed().collect(Collectors.toList());
}
public static void main(String[] args)
{
launch(args);
}
}
我尝试为饼图的每个 "slice" 显示工具提示,类似于 chart.js:
我发现 this answer 基本上是在同一框架中尝试实现相同的目标。它有两个赞成票,并且根据其他(已接受的)答案判断,其他图表类型似乎也适用。但是,从没有显示工具提示的意义上说,代码对我来说真的不起作用。
显示问题的示例代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane pane = new BorderPane();
PieChart chart = new PieChart();
Button randomValues = new Button();
randomValues.setOnAction(ae -> {
chart.getData().clear();
List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
chart.getData().addAll(data);
});
pane.setCenter(chart);
pane.setBottom(randomValues);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
private List<Integer> randomValues() {
return new Random().ints(5).boxed().collect(Collectors.toList());
}
public static void main(String[] args) {
launch(args);
}
}
我预计会有一个类似于图片的弹出窗口,但实际上什么也没有显示。非常感谢任何帮助!
我只是感动
chart.getData().addAll(data);
以上
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
完整代码:
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application
{
@Override
public void start(Stage primaryStage)
{
BorderPane pane = new BorderPane();
PieChart chart = new PieChart();
Button randomValues = new Button();
randomValues.setOnAction(ae -> {
chart.getData().clear();
List<PieChart.Data> data = randomValues().stream().map(i -> new PieChart.Data("Test" + i % 10, i)).collect(Collectors.toList());
chart.getData().addAll(data);
data.forEach(d -> {
Tooltip tip = new Tooltip();
tip.setText(d.getPieValue() + "");
Tooltip.install(d.getNode(), tip);
});
});
pane.setCenter(chart);
pane.setBottom(randomValues);
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
private List<Integer> randomValues()
{
return new Random().ints(5).boxed().collect(Collectors.toList());
}
public static void main(String[] args)
{
launch(args);
}
}