Rendering a single point in a JFreeChart based on the current Value of a Slider

血红的双手。 提交于 2020-01-16 18:51:10

问题


I'm not yet as much into Java as I'd like to be, so I find my current task to be quite a bit challenging:

  • A chart showing data gathered in another class.
  • A slider whose end value is determined by the last entry of in the dataset used in the chart.
  • The playbutton currently doesn't do anything except letting the slider tick in steps of 5 until it is paused again.

My problem right now is: I am supposed to highlight one item at a time in the chart based on which value the slider currently shows.

And to be honest... I'm not yet used to renderers yet.

If I understood it correctly I would need to use

 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)

but I am totally inexperienced with as well the method as its arguments and got no idea how to initialize them.

I mean... I got a plot, a dataset, and 2 series from the chart, I also suggest "item" would be the index of the item to highlight in the series, which I could convert from the slider-value.

Unfortunately plaguing google about it turned out to be rather frustrating since all I got was the very code I posted above on about 50 different pages (I gave up after).

I would like to know ... first of all if I am even about to use the correct method and, as ashamed as I am to ask like this... how to use it.

Well... looking forward to some answers and... thanks in advance.


回答1:


Well, I now solved my problem in a different way than I intended to but it works out just fine for me.

Instead of highlighting a point in the curves I just simply add a Domainmarker that would adjust based on the value the slider currently shows.

class1 TestSlider

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

class2 SliderListener

public interface SliderListener extends EventListener{

public void SliderValueChanged();
}

class3 Chart

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
        }

    });

}

I tried to keep it as short and universal as I could and I hope I didnt cut out anything important. Well, I'm still new to this site, so... in case I did a mistake somewhere feel free to tell me.



来源:https://stackoverflow.com/questions/25711318/rendering-a-single-point-in-a-jfreechart-based-on-the-current-value-of-a-slider

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!