Charts 基于滑块的当前值在JFreeChart中渲染单个点

Charts 基于滑块的当前值在JFreeChart中渲染单个点,charts,jfreechart,itemrenderer,jslider,changelistener,Charts,Jfreechart,Itemrenderer,Jslider,Changelistener,我还没有像我希望的那样深入Java,因此我发现我当前的任务相当具有挑战性: 显示在另一个类中收集的数据的图表 一种滑块,其结束值由图表中使用的数据集中的最后一项确定 playbutton当前除了让滑块以5步为一步,直到再次暂停为止,什么都不做 我现在的问题是:我应该根据滑块当前显示的值在图表中一次突出显示一个项目 老实说。。。我还不习惯渲染器 如果我理解正确,我需要使用 renderer.drawItem(java.awt.Graphics2D g2, XYItemRe

我还没有像我希望的那样深入Java,因此我发现我当前的任务相当具有挑战性:

  • 显示在另一个类中收集的数据的图表
  • 一种滑块,其结束值由图表中使用的数据集中的最后一项确定
  • playbutton当前除了让滑块以5步为一步,直到再次暂停为止,什么都不做
我现在的问题是:我应该根据滑块当前显示的值在图表中一次突出显示一个项目

老实说。。。我还不习惯渲染器

如果我理解正确,我需要使用

 renderer.drawItem(java.awt.Graphics2D g2,
          XYItemRendererState state,
          java.awt.geom.Rectangle2D dataArea,
          PlotRenderingInfo info,
          XYPlot plot,
          ValueAxis domainAxis,
          ValueAxis rangeAxis,
          XYDataset dataset,
          int series,
          int item,
          CrosshairState crosshairState,
          int pass)
但是我对这个方法及其参数完全没有经验,也不知道如何初始化它们

我是说。。。我从图表中得到了一个绘图、一个数据集和2个系列,我还建议“item”是系列中要突出显示的项目的索引,我可以从滑块值转换

不幸的是,困扰谷歌的这件事让我相当沮丧,因为我得到的只是我在50多个不同页面上发布的代码(后来我放弃了)

我想知道。。。首先,如果我打算使用正确的方法,并且,尽管我很惭愧地这样问。。。如何使用它


嗯。。。期待一些答案和。。。提前谢谢。

好吧,我现在用一种不同于预期的方式解决了我的问题,但结果对我来说很好

我没有高亮显示曲线中的一个点,而是简单地添加一个Domainmarker,它将根据滑块当前显示的值进行调整

1类测试滑块

private HashSet<SliderListener> sliderListenerSet = new HashSet<SliderListener>();

public void addSliderListener(SliderListener Listener){
    sliderListenerSet.add(Listener);
}

slider.addChangeListener(this);

public void stateChanged(ChangeEvent e) {
    // TODO Auto-generated method stub
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
            fireSliderChanged();
    }
} 

public void fireSliderChanged(){
    for (SliderListener currentListener : sliderListenerSet)
        currentListener.sliderValueChanged();
}
类别3图表

Marker marker = new ValueMarker(0);
plot.addDomainMarker(marker); //so that it would be there at the beginning
TestSlider ts = new TestSlider();

ts.addSliderListener(new SliderListener(){

        @Override
        public void sliderValueChanged() {

            plot.removeDomainMarker(marker); //I only want one of them at a time - the one with the value the slider is currently showing so remove the old one...
            marker = new ValueMarker(ts.slider.getValue());
            plot.addDomainMarker(marker); // ... and add the one with the new value
        }

    });

}
我尽可能地使它简短和通用,我希望我没有删掉任何重要的内容。
嗯,我对这个网站还是新手,所以。。。如果我在某个地方犯了错误,请随时告诉我。

查看这些
JSlider
和引用的十字线示例。请编辑您的问题,将重点放在您描述的问题上。这正是问题所在。。。我不知道在这一点上使用哪种方法,因此我只能发布没有它的代码,这一点都没有帮助。我首先需要知道drawItem(..)是否是解决我问题的正确方法-我可能完全被误导了,因为我以前从未做过任何类似的事情,可能值得一看。忘了更新它。我通过添加一个DomainMarker解决了这个问题,它将根据滑块当前显示的值进行调整。所以啊。。。我想我现在没事了。我对这里很陌生,但我想对于那些给出最好答案的人来说,有某种奖励功能。。。既然你是唯一一个真正尝试帮助我的人,即使我的问题有点复杂。。。“无组织的”,我不介意给你。所以,只要留下一个答案或什么,我会在下一次来的时候注意的。
Marker marker = new ValueMarker(0);
plot.addDomainMarker(marker); //so that it would be there at the beginning
TestSlider ts = new TestSlider();

ts.addSliderListener(new SliderListener(){

        @Override
        public void sliderValueChanged() {

            plot.removeDomainMarker(marker); //I only want one of them at a time - the one with the value the slider is currently showing so remove the old one...
            marker = new ValueMarker(ts.slider.getValue());
            plot.addDomainMarker(marker); // ... and add the one with the new value
        }

    });

}