监听 JFreeChart 中的缩放重置事件

发布于 2024-12-24 20:30:35 字数 31 浏览 1 评论 0原文

如何监听 JFreeChart 的缩放重置事件?

How can I listen to JFreeChart's zoom reset event?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吝吻 2024-12-31 20:30:35

我用这个做到了:

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

谢谢大家。

I did it using this:

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

Thank You all.

内心荒芜 2024-12-31 20:30:35

我只是添加 @trashgod 建议,以防您想要在特定轴上禁用缩放重置:创建一个覆盖的 ChartPanel ,其中您可以选择“null”restoreAutoDomainBounds()restoreAutoRangeBounds(),如下所示。

当您从图表本身以外的不同组件控制查看区域时,这会很有用(在我的例子中:X 轴由程序设置,但用户可以自由放大/缩小 Y 轴)。

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

I'll just add up on @trashgod suggestion, in case you want to disable zoom reset on a specific axis: create an overriden ChartPanel where you either "null" restoreAutoDomainBounds() or restoreAutoRangeBounds(), as shown below.

That can be useful when you control the viewing area from different components than the chart itself (in my case: the X axis is set by the program but the user can freely zoom in/out the Y axis).

ChartPanel cp = new ChartPanel(null) {
    @Override public void restoreAutoDomainBounds() {
        // Empty body: do not reset X zoom
    }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文