我在使用JFreeChart和JavaFX时遇到问题。我在这里写了一个小程序来帮助解释。
首先,图表喜欢这个:
我使用fullScreen函数来显示JFreeChart折线图演示2.这里我使用SwingNode,ChartPanel将JFreeChart嵌入到JavaFX Panel中。(详细部分将在后面的代码中包含)
然后我按ESC退出fullScreen。然后它看起来像这样:
到目前为止,它正如预期的那样。然后我用鼠标拖动来放大窗口。问题就在这里,如下图所示。
你能看到吗,好像出现了另一张图。我必须点击窗口,然后一切都会变好。我的问题是:谁知道为什么? 我希望即使我拖动窗户放大,图表也能很好地显示,是否有我遗漏的东西?
这是我的代码:
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中使用多个图形时,这将成为一个大问题。