Прослушивание события сброса масштабирования в JFreeChart

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


person Ariyan    schedule 03.01.2012    source источник
comment
Вы пытались переопределить restoreAutoBounds()?   -  person trashgod    schedule 03.01.2012
comment
@trashgod: Нет, я понятия не имею, как это сделать.   -  person Ariyan    schedule 03.01.2012


Ответы (2)


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

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();

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

person Ariyan    schedule 03.01.2012
comment
Спасибо ... @trashgod :) - person Matthieu; 13.05.2016

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

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

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