Java JFreeChart刷新后恢复缩放位置

Java JFreeChart刷新后恢复缩放位置,java,refresh,zooming,jfreechart,Java,Refresh,Zooming,Jfreechart,我有以下方法 private void passStingR(StringBuilder retVal) throws BadLocationException, Exception { int getinitialscrollpos; getinitialscrollpos = getinitialscrollPosition(scrollMEL); //1. get chartPanel Bounds Rectangl

我有以下方法

      private void passStingR(StringBuilder retVal) throws BadLocationException, Exception {
        int getinitialscrollpos;
        getinitialscrollpos = getinitialscrollPosition(scrollMEL);


    //1. get chartPanel Bounds 
        Rectangle2D xy  = chartPanel.getScreenDataArea();

            Rectangle bounds = chartPanel.getBounds();
            int horz = (int) bounds.getX();//need to get the correct x and y
            int vertz = (int) bounds.getY();
            int width1 = (int) bounds.getWidth();
            int height1 = (int) bounds.getHeight();
            System.out.println(horz + " " + vertz + " " + width1 + " " +height1);//get positioning data
   /////////////////////////////////     


        Document docR = null;

        docR = loadXMLFromString(retVal.toString());//pull in the XML data into a new doc
        populate1R(docR);
        tableMEL.getTableHeader().setReorderingAllowed(false);//prevent user from changing column order now at refresh level
        SimpleDateFormat time_formatterR = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String current_time_strR = time_formatterR.format(System.currentTimeMillis());
        updatetFieldDG.setText(current_time_strR);
        middlePanel.add(scrollMEL);
        scrollMEL.getVerticalScrollBar().setValue(getinitialscrollpos);
        System.out.println("End" + getinitialscrollpos);
        getTableData(tableMEL);
        head(tableMEL);
        createGraphGUI();

    //2.the problem lies here as i would expect the chartPanel.setBounds to restore the position that i got at 1.

        chartPanel.setBounds(horz,vertz,width1,height1);//xywidthheight
            System.out.println(chartPanel.getBounds());//set the positioning items as per the start 
////////////


        }
问题是,当刷新数据时,我会丢失缩放定位

因此,我尝试在方法开始时获取chartPanel边界,然后尝试在方法结束时应用它-但是缩放定位只是不断恢复到默认位置,即整个图形。有人能帮忙吗?

我想出了这个办法:

private void passStingR(StringBuilder retVal) throws BadLocationException, Exception {
    int getinitialscrollpos;
    getinitialscrollpos = getinitialscrollPosition(scrollMEL);
    try {
        CategoryPlot plot = (CategoryPlot) chartPanel.getChart().getPlot();//get plot of graph
        //System.out.print("Plot Type" + plot);
        ValueAxis rangeAxis = plot.getRangeAxis();//get range of axis of graph
        System.out.print("Range " + rangeAxis);//get range lower and upper as an array
        map.put(1, rangeAxis);
    } catch (Exception e) {
        System.out.print("Error has occured");
    } finally {
    ////refresh data////
        Document docR = null;
        docR = loadXMLFromString(retVal.toString());//pull in the XML data into a new doc
        populate1R(docR);
        tableMEL.getTableHeader().setReorderingAllowed(false);//prevent user from changing column order now at refresh level
        SimpleDateFormat time_formatterR = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String current_time_strR = time_formatterR.format(System.currentTimeMillis());
        updatetFieldDG.setText(current_time_strR);
        middlePanel.add(scrollMEL);
        scrollMEL.getVerticalScrollBar().setValue(getinitialscrollpos);
        System.out.println("End" + getinitialscrollpos);
        getTableData(tableMEL);
        head(tableMEL);
        createGraphGUI();
        if (map.get(1) != null) {
            System.out.print("get map" + map.get(1));
            CategoryPlot plot = (CategoryPlot) chartPanel.getChart().getPlot();
            plot.setRangeAxis(map.get(1));//get range of axis of graph
        }
    }
}
我算出了这一点:

private void passStingR(StringBuilder retVal) throws BadLocationException, Exception {
    int getinitialscrollpos;
    getinitialscrollpos = getinitialscrollPosition(scrollMEL);
    try {
        CategoryPlot plot = (CategoryPlot) chartPanel.getChart().getPlot();//get plot of graph
        //System.out.print("Plot Type" + plot);
        ValueAxis rangeAxis = plot.getRangeAxis();//get range of axis of graph
        System.out.print("Range " + rangeAxis);//get range lower and upper as an array
        map.put(1, rangeAxis);
    } catch (Exception e) {
        System.out.print("Error has occured");
    } finally {
    ////refresh data////
        Document docR = null;
        docR = loadXMLFromString(retVal.toString());//pull in the XML data into a new doc
        populate1R(docR);
        tableMEL.getTableHeader().setReorderingAllowed(false);//prevent user from changing column order now at refresh level
        SimpleDateFormat time_formatterR = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String current_time_strR = time_formatterR.format(System.currentTimeMillis());
        updatetFieldDG.setText(current_time_strR);
        middlePanel.add(scrollMEL);
        scrollMEL.getVerticalScrollBar().setValue(getinitialscrollpos);
        System.out.println("End" + getinitialscrollpos);
        getTableData(tableMEL);
        head(tableMEL);
        createGraphGUI();
        if (map.get(1) != null) {
            System.out.print("get map" + map.get(1));
            CategoryPlot plot = (CategoryPlot) chartPanel.getChart().getPlot();
            plot.setRangeAxis(map.get(1));//get range of axis of graph
        }
    }
}

不清楚哪里出了差错;请编辑您的问题,以包含一个显示您当前方法的问题。@trashgood我已更新了我的问题@trashgood我正在浏览指南,但getScaledDataArea()无法工作!我无法使用显示的更新模型的方法重现问题,但只保留视图。是的,我尝试了很多不同的方法,我成功地实现了缩放,但它在图表的中心随机缩放,而不是我在开始时得到的位置…你认为这可能吗?不清楚哪里出了差错;请编辑您的问题,以包含一个显示您当前方法的问题。@trashgood我已更新了我的问题@trashgood我正在浏览指南,但getScaledDataArea()无法工作!我无法使用显示的更新模型的方法重现问题,但只保留视图。是的,我尝试了很多不同的方法,我成功地实现了缩放,但它在图表的中心随机缩放,而不是在开始时得到的位置…你认为可能吗?