我还没有像我一样喜欢Java,所以我觉得我当前的任务有点挑战:
我现在的问题是:我应该根据滑块当前显示的值,一次突出显示一个项目。
说实话......我还没有习惯于渲染器。
如果我理解正确,我需要使用
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)
但我完全缺乏对方法和参数的认识,也不知道如何初始化它们。
我的意思是......我从图表中得到了一个情节,一个数据集和两个系列,我还建议" item"将是系列中要突出显示的项目的索引,我可以从滑块值转换。
不幸的是,谷歌关于它的事情变得相当令人沮丧,因为我得到的是我在上面发布的大约50个不同页面上的代码(我放弃了之后)。
我想知道......首先,如果我甚至要使用正确的方法,并且像我一样惭愧地问这样......如何使用它。
嗯...期待一些答案......并提前感谢。
答案 0 :(得分:0)
好吧,我现在以一种与我想要的不同的方式解决了我的问题,但它对我来说很合适。
我只是添加一个可根据滑块当前显示的值进行调整的域标记,而不是突出显示曲线中的一个点。
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
}
});
}
我尽量保持它尽可能简短和普遍,我希望我没有删除任何重要的东西。 好吧,我还是这个网站的新手,所以...如果我在某个地方犯了错误,请随时告诉我。