Page 1 of 1
Associating object with chart point/finding specific chart p
Posted: Mon Jan 26, 2015 10:37 am
by 17471177
Hello,
I was trying to find a way to associate an object with a point in Chart (Line series), because I need to be able to display specific information in the tool tip on mouse hover or alternatively do some specific action on point double click. I tried using the returned value index from the add method, but it does not make sense, because the initial data is not sorted, so any kept index, can be overwritten when the chart rearranges its internal data. Am I missing some obvious way to do this?
Thanks,
Plamen
Re: Associating object with chart point/finding specific chart p
Posted: Mon Jan 26, 2015 12:19 pm
by yeray
Hi Plamen,
You can to use the MarkTextResolver or seriesClicked events provided to change the behaviour according to your needs:
Code: Select all
tChart1.getAspect().setView3D(false);
tChart1.getLegend().setVisible(false);
Points point1 = new Points(tChart1.getChart());
point1.fillSampleValues();
point1.addSeriesMouseListener(new SeriesMouseAdapter() {
@Override
public void seriesClicked(SeriesMouseEvent e) {
}
});
point1.setMarkTextResolver(new MarkTextResolver() {
@Override
public String getMarkText(int valueIndex, String markText) {
return markText;
}
});
Re: Associating object with chart point/finding specific chart p
Posted: Mon Jan 26, 2015 2:15 pm
by 17471177
Hi Yeray,
thanks for your quick answer, but I am afraid I might have not been clear enough specifying my question.
Suppose I have number of objects, O1 through On.
I want to plot one of their properties vs another, and I also want to be able, when user hovers over a point to retrieve the original object O whose properties this point reflects, and probably to display third property. For example if my object has field members:
double x;
double y;
String name;
I want to be able to retrieve the object whose x and y coordinates this point represents and display name property when the mouse is over this chart point.
I thought that using method add(x,y,text) will do, but it does not work as I expected.
regards,
Re: Associating object with chart point/finding specific chart p
Posted: Mon Jan 26, 2015 3:37 pm
by yeray
Hello,
If I understand you correctly, you have something like this:
Code: Select all
final ArrayList<MyObject> myObjectsList = new ArrayList<MyObject>();
for (int i=0; i<10; i++) {
myObjectsList.add(new MyObject());
myObjectsList.get(i).label = "Label " + i;
myObjectsList.get(i).name = "Name " + i;
myObjectsList.get(i).x = i + 1;
myObjectsList.get(i).y = i * 2;
}
tChart1.getAspect().setView3D(false);
tChart1.getLegend().setVisible(false);
final Points point1 = new Points(tChart1.getChart());
for (int i=0; i<myObjectsList.size(); i++) {
point1.add(myObjectsList.get(i).x, myObjectsList.get(i).y, myObjectsList.get(i).label);
}
point1.getMarks().setVisible(true);
MarksTip marksTip1 = new MarksTip(tChart1.getChart());
tChart1.getAxes().getBottom().getLabels().setStyle(AxisLabelStyle.VALUE);
And you want the MaksTip tool to show the
name property, not the
label.
In that case, you could use mouseMove event to find the object that is represented under the mouse, if any, and store it in a global variable (ie objectUnderMouse). Then, you can use the object stored in this global property, if any, at the MarksTip tool getText event as follows:
Code: Select all
tChart1.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent arg0) {
int tmpIndex = -1;
for (int i = 0; i < point1.getCount(); i++) {
tmpIndex = point1.clicked(arg0.x, arg0.y);
if (tmpIndex > -1) {
objectUnderMouse = null;
for (int j = 0; i < myObjectsList.size(); j++) {
if (point1.getXValues().getValue(tmpIndex) == myObjectsList
.get(j).x) {
objectUnderMouse = myObjectsList.get(j);
break;
}
}
break;
}
}
}
});
marksTip1.setToolTipResolver(new TextResolver() {
@Override
public String getText(Object sender, String text) {
if (objectUnderMouse != null)
return objectUnderMouse.name;
return text;
}
});
Re: Associating object with chart point/finding specific chart p
Posted: Mon Jan 26, 2015 3:59 pm
by 17471177
Thanks Yeray,
I think this will work! I will give it a shot and get back to you! I will probably use HashMap with key x_coord_value+"_"+y_coord_value and value the object itself - might be faster than rolling two embedded cycles.
thanks again and regards,
Plamen
Re: Associating object with chart point/finding specific chart p
Posted: Tue Jan 27, 2015 8:21 am
by yeray
Hi Plamen,
Yes, a HashMap will probably be faster. We'll be glad to read your solution if you want to share it here.
And don't hesitate to let us know if you still find problems with it.