使用JavaFX的JFreeChart,放大或缩小时,重绘效果不佳

时间:2015-04-28 13:27:44

标签: javafx jfreechart

我在使用JFreeChart和JavaFX时遇到问题。我在这里写了一个小程序来帮助解释。

首先,图表喜欢这个:

enter image description here

我使用fullScreen函数来显示JFreeChart折线图演示2.这里我使用SwingNode,ChartPanel将JFreeChart嵌入到JavaFX Panel中。(详细部分将在后面的代码中包含)

然后我按ESC退出fullScreen。然后它看起来像这样:

enter image description here

到目前为止,它正如预期的那样。然后我用鼠标拖动来放大窗口。问题就在这里,如下图所示。

enter image description here

你能看到吗,好像出现了另一张图。我必须点击窗口,然后一切都会变好。我的问题是:谁知道为什么? 我希望即使我拖动窗户放大,图表也能很好地显示,是否有我遗漏的东西?

这是我的代码:

package testxychart;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.SplitPane;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 *
 * @author Administrator
 */
public class TestXYChart extends Application {
    NumberAxis xAxis = new NumberAxis();
    NumberAxis yAxis = new NumberAxis();
    XYChart.Series series1 = new XYChart.Series();
    @Override
    public void start(Stage primaryStage) {
        SplitPane vSplitPane = new SplitPane();
        vSplitPane.getItems().add(this.creatChart1());
        primaryStage.setScene(new Scene(vSplitPane));
        primaryStage.setFullScreen(true);
        primaryStage.show();
    }


    private SwingNode creatChart1(){

        XYSeries series1 = new XYSeries("First");
        series1.add(1.0, 1.0);
        series1.add(2.0, 4.0);
        series1.add(3.0, 3.0);
        series1.add(4.0, 5.0);
        series1.add(5.0, 5.0);
        series1.add(6.0, 7.0);
        series1.add(7.0, 7.0);
        series1.add(8.0, 8.0);
        XYSeries series2 = new XYSeries("Second");
        series2.add(1.0, 5.0);
        series2.add(2.0, 7.0);
        series2.add(3.0, 6.0);
        series2.add(4.0, 8.0);
        series2.add(5.0, 4.0);
        series2.add(6.0, 4.0);
        series2.add(7.0, 2.0);
        series2.add(8.0, 1.0);
        XYSeries series3 = new XYSeries("Third");
        series3.add(3.0, 4.0);
        series3.add(4.0, 3.0);
        series3.add(5.0, 2.0);
        series3.add(6.0, 3.0);
        series3.add(7.0, 6.0);
        series3.add(8.0, 3.0);
        series3.add(9.0, 4.0);
        series3.add(10.0, 3.0);
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series1);
        dataset.addSeries(series2);
        dataset.addSeries(series3);

        JFreeChart chart = ChartFactory.createXYLineChart(
                "Line Chart Demo 2", // chart title
                "X", // x axis label
                "Y", // y axis label
                dataset, // data
                PlotOrientation.VERTICAL,
                true, // include legend
                true, // tooltips
                false // urls
        );
        ChartPanel chartPane = new ChartPanel(chart);
        SwingNode sNode = new SwingNode();
        sNode.setContent(chartPane);
        return sNode;
     }



    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }


}

非常感谢您的任何建议。 我想,当我在一个JavaFX Panel中使用多个图形时,这将成为一个大问题。

0 个答案:

没有答案