【问题标题】:JavaFX Polygon in LineChart glitching when resizing the window调整窗口大小时 LineChart 中的 JavaFX 多边形出现故障
【发布时间】:2018-07-10 11:26:07
【问题描述】:

我目前正在编写一个具有 LineChart 的程序,并且在 this question. 的帮助下有条件地为它的背景着色

如您所见,颜色永远不会“清除”。这是我绘制多边形和折线图的代码:

    private void createTabWithChart(String searchedValue) throws Exception {
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    ObservableList<Data<String, Number>> chartData = createChart(searchedValue);

    if (chartData != null) {

        ObservableList<Data<String, Number>> list = FXCollections.observableArrayList();
        Data<String, Number> data;
        for (int i=0; i < dataArray.size(); ++i) {
            data = new Data<>(date.get(i), 0);
            list.add(data);
        }
        Series limit = new XYChart.Series(list);
        limit.setName("Limit");
        LineChart<String, Number> lineChart = new LineChart<String, Number>(xAxis, yAxis, FXCollections.observableArrayList() )
        {
            protected void layoutPlotChildren() {
                super.layoutPlotChildren();
                double y1;
                double y2;
                for (int i = 0; i < list.size() - 1; i++) {
                    double x1 = 0;
                    double x2 = 100000; // an absurdly large number!
                        y1 = getYAxis().getDisplayPosition(yAxis.getUpperBound());
                        y2 = getYAxis().getDisplayPosition(yAxis.getUpperBound());

                    Polygon polygon = new Polygon();

                    polygon.getPoints().addAll(new Double[] { 
                                    x1, y1, 
                                    x1, getYAxis().getDisplayPosition(list.get(i).getYValue()), 
                                    x2, getYAxis().getDisplayPosition(list.get((i + 1)).getYValue()), 
                                    x2, y2 });
                    getPlotChildren().add(polygon);
                    polygon.toBack();
                    polygon.getStyleClass().add("polygon");
                }
            }
        };
        Series series = new XYChart.Series(chartData);
        series.setName(searchedValue);
        limit.setName("Limit");
        lineChart.getData().addAll(series, limit);
        lineChart.setLegendVisible(false);
        lineChart.setTitle(searchedValue);
        Tab tab = new Tab();
        tab.setText(searchedValue);
        tabPane.getTabs().add(tab);
        tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);
        tab.setContent(lineChart);
    }
}

(代码被清除了一点,我已经排除了一些我认为不相关的东西)

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    我通过将Polygon polygon = new Polygon(); 移出lineChart 并在layoutplotchildren 的开头调用getPlotChildren().remove(polygon) 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多