首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用鼠标单击位置标签错误的Oracles JavaFX示例?

用鼠标单击位置标签错误的Oracles JavaFX示例?
EN

Stack Overflow用户
提问于 2014-08-20 20:57:59
回答 1查看 1.3K关注 0票数 1

http://docs.oracle.com/javafx/2/charts/pie-chart.htm,甲骨文建议使用

代码语言:javascript
复制
caption.setTranslateX(e.getSceneX());
caption.setTranslateY(e.getSceneY());

若要在单击鼠标的位置放置标签,请执行以下操作。但这根本不起作用。有关证明,请参阅此打印屏幕:

EN

回答 1

Stack Overflow用户

发布于 2014-08-20 22:03:57

code for the example you cite中,PieChart和caption Label都直接放置在作为场景根的Group中。因此,在应用变换之前,Label的位置是(0,0) (Scene的左上角),因此通过(e.getSceneX(), e.getSceneY())对其进行转换会将其移动到鼠标位置。

如果您的布局不同,那么相同的计算不一定会起作用。要获得更一般的解决方案,请将图表和标题放在Group中,然后在Group上调用sceneToLocal(...),将场景坐标转换为Group中的正确坐标

代码语言:javascript
复制
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Point2D;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class PieChartSample extends Application {

    @Override
    public void start(Stage stage) {

        BorderPane root = new BorderPane();

        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 Label caption = new Label("");
        caption.setTextFill(Color.DARKORANGE);
        caption.setStyle("-fx-font: 24 arial;");

        Group chartWithCaption = new Group(chart, caption);

        for (final PieChart.Data data : chart.getData()) {
            data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED,
                    new EventHandler<MouseEvent>() {
                        @Override public void handle(MouseEvent e) {
                            Point2D locationInScene = new Point2D(e.getSceneX(), e.getSceneY());
                            Point2D locationInParent = chartWithCaption.sceneToLocal(locationInScene);

                            caption.relocate(locationInParent.getX(), locationInParent.getY());

                            caption.setText(String.valueOf(data.getPieValue())  + "%");
                        }
                    });
        }

        root.setCenter(chartWithCaption);

        // Just some stuff to change the overall layout:
        HBox controls = new HBox(5);
        controls.setPadding(new Insets(10));
        controls.setAlignment(Pos.CENTER);
        controls.getChildren().addAll(new Label("Some other stuff here"), new TextField(), new Button("OK"));
        root.setTop(controls);
        root.setPadding(new Insets(0, 0, 10, 40));
        root.setLeft(new Circle(25,  Color.SALMON));

        Scene scene = new Scene(root);
        stage.setTitle("Imported Fruits");
        stage.setWidth(600);
        stage.setHeight(500);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25405366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档