MouseEvent срезов PieChart не работает в ControlsFX PopOver (JavaFX) - PullRequest
0 голосов
/ 23 декабря 2018

Я использую PopOver из библиотеки ControlsFX.Я успешно реализовал пользовательские макеты в PopOver в соответствии с дизайном, включая PieChart.Я заполнил данные на круговой диаграмме без проблем, и круговые фрагменты выглядят нормально, но при установке событий мыши на их фрагменты, таких как ввод мыши, нажатие мыши и т. Д., События не запускаются.

Чтобы дать вам код, ребятассылка, я сделал простое приложение FXML.

Sample.fxml

    <?import javafx.scene.control.Button?>
    <?import javafx.scene.layout.BorderPane?>

    <BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.121" fx:controller="sample.Controller">
    <center>
      <Button fx:id="btn" mnemonicParsing="false" text="Button" BorderPane.alignment="CENTER" />
    </center>
</BorderPane>

Controller.java

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import org.controlsfx.control.PopOver;
import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {

    @FXML
    public Button btn;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

            PieChart pieChart = new PieChart();
            pieChart.setData(getChartData());
            pieChart.setPrefSize(200, 200);
            pieChart.setMinSize(200, 200);
            pieChart.setMaxSize(200, 200);

            for (final PieChart.Data data : pieChart.getData()) {
                Node node = data.getNode();
                System.out.println("Check1"); // its working.
                node.setOnMouseClicked(event -> {
                    System.out.println("Mouse Clicked!"); // not triggered.
                });
                node.setOnMouseEntered(event -> {
                    System.out.println("Mouse Entered!"); // not triggered.
                });
                node.setOnMouseExited(event -> {
                    System.out.println("Mouse Exited!"); // not triggered.
                });
            }

            PopOver popOver = new PopOver(pieChart);
            popOver.setPrefSize(500, 500);

        btn.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                popOver.show(btn);
            }
        });
    }

    private ObservableList<PieChart.Data> getChartData() {
        ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
        data.add(new PieChart.Data("A", 36));
        data.add(new PieChart.Data("B", 36));
        data.add(new PieChart.Data("C", 36));
        data.add(new PieChart.Data("D", 36));
        data.add(new PieChart.Data("E", 36));
        data.add(new PieChart.Data("F", 36));
        return data;
    }

}

И основной класс как обычно.

Main.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 500, 500));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Здесь в этом коде всплывающее окно отображается при нажатии кнопки.Я надеюсь, что у вас, ребята, есть некоторые решения.

Заранее спасибо.

...