当前位置: 首页 > 知识库问答 >
问题:

在条形图JavaFX的每个条形内添加图像

翟凯
2023-03-14

我知道如何在条形图的每个条形图顶部或内部添加文本

private void displayLabelForData(XYChart.Data<String, Number> data) {
    final Node node = data.getNode();
    final Text dataText = new Text(data.getYValue() + "");
    node.parentProperty().addListener(new ChangeListener<Parent>() {
        @Override 
        public void changed(ObservableValue<? extends Parent> ov, Parent oldParent, Parent parent) {
            Group parentGroup = (Group) parent;
            parentGroup.getChildren().add(dataText);
        }
    });

    node.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {

        @Override 
        public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) {
            dataText.setLayoutX(Math.round(bounds.getMinX() + bounds.getWidth() / 2 - dataText.prefWidth(-1) / 2));

            //on top of each bar
            dataText.setLayoutY(Math.round(bounds.getMinY() - dataText.prefHeight(-1) * 0.5));
        }
    });
}

或在每个酒吧内

dataText.setLayoutY(Math.round(bounds.getMinY() - dataText.prefHeight(-1) * -0.5));

我还知道如何使用 JavaFX 加载图像,并将图像显示到图像视图。

Image myImage = new Image("location.png");
ImageView viewImage = new ImageView();
viewImage.setImage(myImage);

现在假设我在酒吧图表中有5个小节,我有5个图像。

现在我想知道是否有可能将每个图像添加到条形图的每个条中。有我不知道的方法吗?

谢啦!


共有1个答案

权兴为
2023-03-14

以下是如何将图像添加BarChart 数据的示例:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class BarChartExample extends Application {

    @Override 
    public void start(Stage stage) {
        stage.setTitle("Bar Chart Sample");
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis);
        barChart.setTitle("Country Summary");
        xAxis.setLabel("Country");
        yAxis.setLabel("Value");

        XYChart.Series series = new XYChart.Series();
        series.setName("2003");
        series.getData().addAll(new XYChart.Data("Brazil", 20148.82),
                new XYChart.Data("France", 10000),
                new XYChart.Data("Italy", 35407.15),
                new XYChart.Data("USA", 17000));


        Platform.runLater(() -> {
            series.getData().forEach(seriesData -> {
                XYChart.Data data = (XYChart.Data) seriesData;
                StackPane node = (StackPane) data.getNode();
                String name = (String) data.getXValue();
                ImageView imageView = getImageForCountry(name);
                imageView.fitWidthProperty().bind(node.widthProperty().multiply(.5));
                imageView.setPreserveRatio(true);
                node.getChildren().add(imageView);
            });
        });
        barChart.getData().addAll(series);
        Scene scene  = new Scene(barChart, 800, 600);
        stage.setScene(scene);
        stage.show();
    }

    private ImageView getImageForCountry(String countryName) {
        URL url = getClass().getResource(countryName.toLowerCase() + ".png");
        Image image = new Image(url);
        return new ImageView(image);
    }

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

输出:

 类似资料:
  • 我试图理解他们条形图上的ChartJS文档。这对我来说没有意义,因为顶部的标签在一次意义上看起来似乎只适用于第一个栏(基于颜色),在另一种意义上,它适用于整个图表(它是唯一一个不在工具提示中的标签,它位于前面和中间) 我一直在努力使它更像他们的折线图,它显示了一个带有标签的图例和一个与图表上每条线相关的彩色正方形。(他们没有多行图表的示例,但它确实是这样工作的)。 我希望在顶部有一个图例,表示浅绿

  • 最近在glassdoor-like网站上遇到了一个面试问题,我找不到一个优化的解决方案来解决这个问题: 这和积水问题完全不同。请通读这些例子。 给定一个输入数组,每个元素表示塔的高度,将浇水量,索引号表示浇水位置。每个塔的宽度为1。浇水后打印图表。 备注: > 浇注位置永远不会处于峰值位置。无需考虑分水的情况。 (如果您给出了这种情况的解决方案,您可以假设如果在峰值位置倒入N水,N/2水向左,N/

  • 我正在JavaFX 2.2中动态创建一个StocckedBarChart(见下面的代码片段)我想让每个条形图充当一个超链接,这样当悬停在它上面时它会发光,当单击它时它会打开一个详细信息屏幕,其中包含有关用于绘制图表中相关条形图的源数据的更多信息。 我想做这样的事情:

  • 我有一个这样的数据帧: 现在,我想绘制水平条形图,其中平台名称位于相应的条形图中,使其看起来像这样: 我该怎么做?

  • 在自定义图表上工作,可以根据数据提供的值确定条形图或水平条形图中的条形图的厚度,而不是使用barThickness或barPer百分比/类别百分比的预设宽度。 目标:我可以用包含值和

  • 我有以下数据: 这导致了下图: 我需要在每个栏的顶部添加值。需要帮助吗?