Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 使用滑块更新SwingNode中的Jfreechart_Javafx_Jfreechart_Jslider - Fatal编程技术网

Javafx 使用滑块更新SwingNode中的Jfreechart

Javafx 使用滑块更新SwingNode中的Jfreechart,javafx,jfreechart,jslider,Javafx,Jfreechart,Jslider,我正在使用SwingNode将JFreeChart插入JavaFX应用程序。我能够使用数组绘制线图。我想用滑块值更新图表。我的意思是图表应该可以在图形区域中移动 这是我的控制器代码和绘制图形的代码 我没有任何例外,一切都正常执行,但我无法将滑块与图形连接起来。请帮我找出我犯的错误 public class FXMLController implements Initializable { @FXML private void open_btn_action(ActionEvent eve

我正在使用SwingNode将JFreeChart插入JavaFX应用程序。我能够使用数组绘制线图。我想用滑块值更新图表。我的意思是图表应该可以在图形区域中移动

这是我的控制器代码和绘制图形的代码

我没有任何例外,一切都正常执行,但我无法将滑块与图形连接起来。请帮我找出我犯的错误

public class FXMLController implements Initializable 
{

 @FXML
 private void open_btn_action(ActionEvent event) 
 {
    xArray = new double[]{0.0};
    yArray = new double[]{0.0};
    fc=new FileChooser();
    fc.getExtensionFilters().addAll();
    fc.getExtensionFilters().addAll(new ExtensionFilter("Text Files","*.txt"));
    fc.getExtensionFilters().addAll(new ExtensionFilter("CSV Files","*.csv"));

    file=fc.showOpenDialog(null);

    if(file!=null)
    { //System.out.println(file.getAbsolutePath());
        try 
        {
            count = (int) Files.lines(file.toPath(), Charset.defaultCharset()).count();
        } 
        catch (IOException ex)  
         {
            Logger.getLogger(Data.class.getName()).log(Level.SEVERE, null, ex);
         }
       data = Data.getData(file,count);
       xArray = new double[data.length];
       yArray = new double[data.length];

       xArray = Data.array_x_value(data);
       yArray = Data.array_y_value(data);

       chart = Chart.chart_plot(xArray,yArray);
       final SwingNode chartSwingNode = new SwingNode();
       final SwingNode sliderNode = new SwingNode();

       chartSwingNode.setContent(new ChartPanel(chart));

       final JSlider slider = new JSlider(0,xArray.length);
      slider.addChangeListener(new ChangeListener() 
      {
        @Override
        public void stateChanged(ChangeEvent e) 
        {
            final XYPlot plot = (XYPlot) chart.getPlot();
            plot.setDataset(Chart.list.get(slider.getValue()));
            System.out.println(slider.getValue());
        }});

       sliderNode.setContent(slider);
       //Adding Chart to the splitPane and slider on the display
       bPane.setCenter(chartSwingNode);
       bPane.setBottom(sliderNode);


        upperCount = xArray.length;
        mainSplit.getItems().set(1,bPane);

       }              
      }

     }



    //Chart Class to plot chart

public class Chart 
{
static JFreeChart chart;
static double[] xValues,yValues;
static XYPlot plot;
    static List<XYDataset> list = new ArrayList<XYDataset>();

public static JFreeChart chart_plot(double[] x,double[] y)
{
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());  // for look and feel like a desktop application

      } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException e) { }
    xValues=new double[x.length];  
    xValues=x;
    yValues=new double[y.length];
    yValues=y;
    XYDataset dataset=createDataset(xValues,yValues);
    chart = ChartFactory.createXYLineChart("","Wave number cm"+'\u2212'+'\u00B9',"Intensity",
             dataset, PlotOrientation.VERTICAL,true, true, false);
     chart.getPlot().setBackgroundPaint(new Color(235, 244, 250));
     plot = (XYPlot)chart.getPlot();
     final NumberAxis axis2 = (NumberAxis) plot.getRangeAxis();
             //axis2.setLabelPaint(Color.magenta);  
             //axis2.setTickLabelPaint(Color.darkGray);
     axis2.setAutoRange(true);
     axis2.setAutoRangeIncludesZero(false);
     plot.getRenderer().setSeriesPaint(0, new Color(10,11,45));
             plot.getRenderer().setSeriesStroke(0,new BasicStroke(1.25f));
             plot.setDomainPannable(false);
     plot.setDomainGridlinePaint(new Color(0xC0,0xC0,0xC0));
     plot.setRangeGridlinePaint(new Color(0xC0,0xC0,0xC0));
     plot.setRangeZeroBaselineVisible(false);
     plot.setDomainZeroBaselineVisible(false);
             plot.setOutlineVisible(false);
     ValueAxis domain = plot.getDomainAxis();
         domain.setAutoRange(true);
        //range.setRange(-MINMAX, MINMAX);
     plot.configureRangeAxes(); 
     plot.setDomainCrosshairVisible(true);   
         plot.setDomainCrosshairLockedOnData(true);   
         plot.setRangeCrosshairVisible(true);
           //plot.setOutlinePaint(Color.gray);      
      //System.out.println(plot.isRangeZeroBaselineVisible());
     XYLineAndShapeRenderer renderer =
                (XYLineAndShapeRenderer) plot.getRenderer();     
    ChartListener.chartListner(chart);
            //System.out.println("X length="+ xValues.length);  
             list = new ArrayList<XYDataset>();
    for (int i = 0; i <= xValues.length; i++) {
        list.add(getDataset(i));
    }

    return chart;       
}

private static XYDataset getDataset(int n) {

    final XYSeries series = new XYSeries("series1");
    double values;
    for (int length = 0; length < xValues.length; length++) {
        values = xValues[length];
        series.add(values, yValues[length]);
      }
       return new XYSeriesCollection(series);
   }
   public static XYDataset createDataset(double[] array_x,double[] array_y)
  {
    DefaultXYDataset ds = new DefaultXYDataset();
    double[][] data={array_x,array_y};
            ds.addSeries("series1", data);
            return ds;
   }

 }  
公共类FXMLController实现可初始化
{
@FXML
私有无效打开\u btn\u操作(ActionEvent事件)
{
xArray=newdouble[]{0.0};
yArray=新的双[]{0.0};
fc=新文件选择器();
fc.getExtensionFilters().addAll();
fc.getExtensionFilters().addAll(新的ExtensionFilter(“文本文件”,“*.txt”);
fc.getExtensionFilters().addAll(新的ExtensionFilter(“CSV文件”,“*.CSV”);
file=fc.showOpenDialog(null);
如果(文件!=null)
{//System.out.println(file.getAbsolutePath());
尝试
{
count=(int)Files.lines(file.toPath(),Charset.defaultCharset()).count();
} 
捕获(IOEX异常)
{
Logger.getLogger(Data.class.getName()).log(Level.SEVERE,null,ex);
}
data=data.getData(文件,计数);
xArray=新的双精度[data.length];
yArray=新的双精度[data.length];
xArray=数据。数组×值(数据);
yArray=数据。数组_y_值(数据);
图表=图表。图表+绘图(xArray,yArray);
最终SwingNode chartSwingNode=新SwingNode();
最终SwingNode sliderNode=新SwingNode();
setContent(新的ChartPanel(图表));
最终JSlider滑块=新JSlider(0,xArray.length);
slider.addChangeListener(新的ChangeListener()
{
@凌驾
公共无效状态已更改(更改事件e)
{
最终XYPlot=(XYPlot)chart.getPlot();
plot.setDataset(Chart.list.get(slider.getValue());
System.out.println(slider.getValue());
}});
sliderNode.setContent(滑块);
//将图表添加到拆分窗格和屏幕上的滑块
设置中心(chartSwingNode);
b平面设置底部(滑块节点);
上限=xArray.length;
mainSplit.getItems().set(1,bPane);
}              
}
}
//图表类来绘制图表
公共课程表
{
静态海图;
静态双[]X值,Y值;
静态XY图;
静态列表=新的ArrayList();
公共静态JFreeChart图表(双[]x,双[]y)
{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//用于类似桌面应用程序的外观
}catch(ClassNotFoundException | IllegalAccessException | instanceionexception | UnsupportedLookAndFeelException e){}
xValues=新的双精度[x.长度];
xvalue=x;
y值=新的双精度[y.长度];
y值=y;
XYDataset数据集=createDataset(xValues,yValues);
chart=ChartFactory.createXYLineChart(“,”波数cm“+”\u2212“+”\u00B9“,”强度“,
数据集,PlotOrientation.VERTICAL,true,true,false);
getPlot().setBackgroundPaint(新颜色(235244250));
plot=(XYPlot)chart.getPlot();
最终NumberAxis axis2=(NumberAxis)plot.getRangeAxis();
//axis2.setLabelPaint(颜色为洋红色);
//axis2.setTickLabelPaint(Color.darkGray);
axis2.setAutoRange(真);
axis2.SetAutoRangeIncludeZero(假);
plot.getRenderer().setSeriesPaint(0,新颜色(10,11,45));
plot.getRenderer().setSeriesStroke(0,新的基本行程(1.25f));
plot.setDomainPanable(false);
plot.setDomainGridlinePaint(新颜色(0xC0,0xC0,0xC0));
plot.setRangeGridlinePaint(新颜色(0xC0,0xC0,0xC0));
plot.setRangeZeroBaselineVisible(假);
plot.setDomainZeroBaselineVisible(false);
plot.setOutlineVisible(false);
ValueAxis域=plot.getDomainAxis();
domain.setAutoRange(true);
//range.setRange(-MINMAX,MINMAX);
plot.configureRangeAxes();
plot.setDomainCrosshairVisible(true);
plot.setDomainCrosshairLockedOnData(真);
plot.setRangeCrosshairVisible(真);
//plot.setOutlinePaint(颜色:灰色);
//System.out.println(plot.isRangeZeroBaselineVisible());
XylineandShaperEnder渲染器=
(XYLineAndShapeRenderer)plot.getRenderer();
ChartListener.chartListner(图表);
//System.out.println(“X length=“+xValues.length”);
列表=新的ArrayList();

对于(int i=0;我引用了这个。你在找一个吗?是的……谢谢,我能得到一些这样的例子吗?我创建了自己的SlidingXYDataset,它实现XYDataset的方式类似于SlidingCategoryDataset实现CategoryDataset的方式。但是它不起作用。请建议我怎么做?你尝试过引用的实现吗?