Прослушивание события сброса масштаба в JFreeChart - PullRequest
2 голосов
/ 03 января 2012

Как я могу прослушать событие сброса увеличения JFreeChart?

Ответы [ 2 ]

4 голосов
/ 03 января 2012

Я сделал это, используя это:

ChartPanel DCP=new ChartPanel(DailyChart){
    @Override
    public void restoreAutoBounds(){
        super.restoreAutoDomainBounds();
        super.restoreAutoRangeBounds();

        XYPlot plot=(XYPlot)getChart().getPlot();

        Calendar Cal=Calendar.getInstance();
        String dayName=Cal.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.SHORT,new Locale("en", "us")).toLowerCase();
        String tmp[]=((String)Configurations.getWeeklyWorkingSchedule().get(dayName).get("start")).split(":");
        Cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(tmp[0]));
        Cal.set(Calendar.MINUTE, Integer.parseInt(tmp[1]));
        Cal.set(Calendar.SECOND, 0);
        long start=Cal.getTimeInMillis();
        tmp=((String)Configurations.getWeeklyWorkingSchedule().get(dayName).get("end")).split(":");
        Cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(tmp[0]));
        Cal.set(Calendar.MINUTE, Integer.parseInt(tmp[1]));
        Cal.set(Calendar.SECOND, 0);
        long end=Cal.getTimeInMillis();

        plot.getDomainAxis().setAutoRange(false);
        plot.getDomainAxis().setRange(start,end);
    }
};
DCP.restoreAutoBounds();

Спасибо всем.

1 голос
/ 13 мая 2016

Я просто добавлю к предложению @trashgod, на случай, если вы захотите отключить сброс масштабирования по определенной оси: создайте переопределение ChartPanel, где вы либо "ноль" restoreAutoDomainBounds(), либо restoreAutoRangeBounds(), как показано ниже.

Это может быть полезно, когда вы управляете областью просмотра из других компонентов, чем сама диаграмма (в моем случае: ось X установлена ​​программой, но пользователь может свободно увеличивать / уменьшать ось Y).

ChartPanel cp = new ChartPanel(null) {
    @Override public void restoreAutoDomainBounds() {
        // Empty body: do not reset X zoom
    }
};
...