나는이 튜토리얼 ("원형 차트의 처리 마우스 이벤트"라고 하단에있는 섹션) 다음 해요 :각 파이 조각에 이벤트를 추가 한 후에 JavaFX PieChart 레이블이 표시되지 않는 이유는 무엇입니까? (자바 8)
https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/pie-chart.htm
를 다음과 같이 내 코드는 다음과 같습니다
@FXML
public void initialize() {
pieChart.setTitle("Breakdown of Customers by City");
pieChart.setLegendSide(Side.LEFT);
final Task<ObservableList<PieChart.Data>> task = new NumClientsAtLocationTask(new CustomerAccountDaoSelect());
new Thread(task).start();
task.setOnSucceeded(ae -> {
pieChart.setData(task.getValue());
final Label caption = new Label("");
caption.setTextFill(Color.DARKORANGE);
caption.setStyle("-fx-font: 24 arial;");
for (final PieChart.Data data : pieChart.getData()) {
data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
ae2 -> {
caption.setTranslateX(ae2.getSceneX());
caption.setTranslateY(ae2.getSceneY());
caption.setText(String.valueOf(data.getPieValue()));
});
}
});
}
class NumClientsAtLocationTask extends Task<ObservableList<PieChart.Data>> {
private DaoSelect<CustomerAccount> customerAccountDaoSelect;
NumClientsAtLocationTask(DaoSelect<CustomerAccount> customerAccountDaoSelect) {
this.customerAccountDaoSelect = customerAccountDaoSelect;
}
@Override
protected ObservableList<PieChart.Data> call() throws Exception {
List<CustomerAccount> customerAccounts = customerAccountDaoSelect.select(RunListeners.FALSE);
Map<String, List<CustomerAccount>> customerMap =
customerAccounts
.stream()
.collect(Collectors.groupingBy(CustomerAccount::getCity));
int london = customerMap.get("London").size();
int phoenix = customerMap.get("Phoenix").size();
int newYork = customerMap.get("New York").size();
ObservableList<PieChart.Data> results = FXCollections.observableArrayList(
new PieChart.Data("London", london),
new PieChart.Data("Phoenix", phoenix),
new PieChart.Data("New York", newYork));
updateValue(results);
return results;
}
}
차트는 기본 형식으로 잘 표시되지만 슬라이스에서 마우스를 클릭하면 레이블이 나타나지 않습니다. 콘솔에 레이블을 인쇄하면 올바른 값을 표시합니다. 자습서와 같이 화면에 레이블이 나타나지 않습니다. 어떤 아이디어?
뜨아, 나는 레이블이 장면 노드 그래프의 일부가 될 필요가 있음을 간과. 나는 FXML 주입을 통해 그것을 추가했고 지금 작동합니다. – DayTripperID