Hola,
No consigo dejar marcas fijas en la gráfica, ni tampoco más de una.
Utilizando la herramienta 'mark tips', va poniendo marcas correctamente, aunque me gustaria que no existiera delay sino que simplemente se quedaran fijas, y mediant la herramienta 'nearest point' no sale ningun tipo de marca en la gráfica.
Gracias por la ayuda
Carlos.
Diversas marcas fijas en una gráfica estática
Hola Carlos,
Para conseguir Marcas permanentes:
Ejemplo:
Setting Marks to Visible
Se puede modificar otros aspectos de las marcas por la misma clase:
Ej.
saludos,
Marc Meumann
Para conseguir Marcas permanentes:
Ejemplo:
Setting Marks to Visible
Code: Select all
lineSeries = new com.steema.teechart.styles.Line(tChart.getChart());
lineSeries.getMarks().setVisible(true);
Ej.
Code: Select all
lineSeries.getMarks().setBackColor(com.steema.teechart.drawing.Color.ORANGE);
lineSeries.getMarks().setTransparency(30);
Marc Meumann
Steema Support
Mi intencion es mas bien que el usuario tenga la opcion de elegir un punto de la grafica, y por ejemplo haciendo clic con el raton, aparezca una marca.
Esto se puede conseguir facilmente con 'tool->mark tips', pero no quiero que desaparezca, sino que se quede fija y que pueda ir a otro punto y marcarlo tambien.
Habia pensado en, por ejemplo, utilizar el boton derecho del raton, o sea, utilizar 'mark tips' con movimiento en vez de con el clic del raton, que el usuario haga un clic en el boton derecho cuando quiera que se quede marcado ese punto, y que aparezca una marca (que no es la misma que con 'mark tips') de manera permanente, sin que se borre con el tiempo.
Podria hacerse con una anotacion verdad?, o sea, en el momento que reciba el evento del boton derecho del mouse, recoger su posicion, recoger de alguna manera la serie a la que se refiere, y crear una anotacion en esa posicion con los datos que me interesen de la serie.
Hay muchos problemas en hacerlo asi?, o hay alguna otra manera mas sencilla de conseguir lo que quiero?
Gracias por la ayuda
Carlos.
Esto se puede conseguir facilmente con 'tool->mark tips', pero no quiero que desaparezca, sino que se quede fija y que pueda ir a otro punto y marcarlo tambien.
Habia pensado en, por ejemplo, utilizar el boton derecho del raton, o sea, utilizar 'mark tips' con movimiento en vez de con el clic del raton, que el usuario haga un clic en el boton derecho cuando quiera que se quede marcado ese punto, y que aparezca una marca (que no es la misma que con 'mark tips') de manera permanente, sin que se borre con el tiempo.
Podria hacerse con una anotacion verdad?, o sea, en el momento que reciba el evento del boton derecho del mouse, recoger su posicion, recoger de alguna manera la serie a la que se refiere, y crear una anotacion en esa posicion con los datos que me interesen de la serie.
Hay muchos problemas en hacerlo asi?, o hay alguna otra manera mas sencilla de conseguir lo que quiero?
Gracias por la ayuda
Carlos.
-
- Site Admin
- Posts: 14730
- Joined: Mon Jun 09, 2003 4:00 am
- Location: Banyoles, Catalonia
- Contact:
Hola Carlos,
En este caso yo utilizaria AnnotationTools. Puedes encontrar ejemplos en la sección All Features\Welcome!\Tools\Annotation de la demo TeeChart.Features.jar, incluida con la instalación.
También agradeceriamos que, si es possible, escribieras tus mensajes en inglés. De este modo muchos mas usuarios de los foros pueden seguir las discusiones.
Gracias de antemano.
En este caso yo utilizaria AnnotationTools. Puedes encontrar ejemplos en la sección All Features\Welcome!\Tools\Annotation de la demo TeeChart.Features.jar, incluida con la instalación.
También agradeceriamos que, si es possible, escribieras tus mensajes en inglés. De este modo muchos mas usuarios de los foros pueden seguir las discusiones.
Gracias de antemano.
Best Regards,
Narcís Calvet / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Hola Carlos,
Si. Lo podrias hacer con Annotation.
Una manera seria utilizar 'clicked' del Series.
Ej.
Las Annotations se activan cuando pasas el mouse sobre los puntos de la Series.
saludos,
Marc
Si. Lo podrias hacer con Annotation.
Una manera seria utilizar 'clicked' del Series.
Ej.
Code: Select all
private int pointIndex=-1;
private void initTChart(){
tChart.setHeight(100);
tChart.setMinimumSize(new java.awt.Dimension(100, 100));
tChart.setPreferredSize(new java.awt.Dimension(100, 100));
tChart.setWidth(100);
mat = new double[15][24];
for(int i=0; i<1; i++){
lineSeries = new com.steema.teechart.styles.Line(tChart.getChart());
lineSeries.setClickableLine(false);
lineSeries.getPointer().setVisible(true);
for(int j=0; j<24; j++){
lineSeries.add(10*Math.random());
}
tChart.addMouseMotionListener( new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
double tmpX = tChart.getAxes().getBottom().calcPosPoint(e.getX());
int i = (int)Math.round(tmpX);
double tmpY;
try
{
tmpY = lineSeries.getYValues().getValue(i);
}
catch(ArrayIndexOutOfBoundsException ee)
{
return;
}
int yValue = tChart.getAxes().getLeft().calcPosValue(tmpY);
int tmpPoint = lineSeries.clicked(e.getX(), e.getY());
pointIndex = tmpPoint;
tChart.repaint();
}
});
tChart.addChartPaintListener( new com.steema.teechart.events.ChartPaintAdapter() {
public void chartPainted(com.steema.teechart.events.ChartDrawEvent pce) {
if (pointIndex!=-1) {
com.steema.teechart.tools.Annotation anno=new com.steema.teechart.tools.Annotation(tChart.getChart());
anno.setText(Integer.toString(pointIndex));
anno.setLeft(lineSeries.calcXPos(pointIndex));
anno.setTop(lineSeries.calcYPos(pointIndex));
}
}
});
}
tChart.getFooter().setVisible(true);
tChart.getHeader().setVisible(true);
tChart.getAspect().setView3D(false);
tChart.getLegend().setVisible(false);
tChart.setBackground(Color.WHITE);
jFrameTeeChartCommander = new Commander(tChart.getChart());
jFrameTeeChartCommander.setFloatable(false);
jFrameTeeChartCommander.setVisible(true);
jFrameTeeChartCommander.setRollover(true);
jPanel1.setLayout(new BorderLayout());
jPanel1.add(jFrameTeeChartCommander, BorderLayout.PAGE_START);
jPanel1.add(tChart, BorderLayout.CENTER);
jPanel1.repaint();
jPanel1.validate();
}
saludos,
Marc
Estoy probando un poco con el codigo que has pasado, aun tengo problemillas con la posicion de la Annotation y cosillas por el estilo, supongo que es por haber fusilado el codigo directamente, sigo mirandolo
Otra preguntilla, para borrar estas anotaciones?, por si se hace un zoom y tal, donde se 'guardan'?
Y el tema de ingles, lo siento pero no tengo suficiente nivel como para poder escribir bien, pero a partir de ahora (este post), intentare secuestrar a alguien para que me vaya traduciendo.
Gracias
Carlos.
Otra preguntilla, para borrar estas anotaciones?, por si se hace un zoom y tal, donde se 'guardan'?
Y el tema de ingles, lo siento pero no tengo suficiente nivel como para poder escribir bien, pero a partir de ahora (este post), intentare secuestrar a alguien para que me vaya traduciendo.
Gracias
Carlos.
-
- Site Admin
- Posts: 14730
- Joined: Mon Jun 09, 2003 4:00 am
- Location: Banyoles, Catalonia
- Contact:
Hola Carlos,
Puedes acceder las anotaciones como se muestra abajo. Ten en cuenta que seguramente tendrás que hacer un "type casting" de las tools en la colección getTools ya que puede que no todas las tools sean anotaciones.
De acuerdo, ningún problema, puedes seguir escribiendo en castellano.
Cada vez que se hace zoom tendrias que actualizar la posición de las anotaciones en el evento Zoomed del chart.Otra preguntilla, para borrar estas anotaciones?, por si se hace un zoom y tal, donde se 'guardan'?
Puedes acceder las anotaciones como se muestra abajo. Ten en cuenta que seguramente tendrás que hacer un "type casting" de las tools en la colección getTools ya que puede que no todas las tools sean anotaciones.
Code: Select all
for(int i=0; i<tChart.getTools().size(); i++){
//tChart.getTools().getTool(i) //type casting necesario
}
Y el tema de ingles, lo siento pero no tengo suficiente nivel como para poder escribir bien, pero a partir de ahora (este post), intentare secuestrar a alguien para que me vaya traduciendo.
De acuerdo, ningún problema, puedes seguir escribiendo en castellano.
Best Regards,
Narcís Calvet / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Ya he conseguido lo de las anotaciones, aunque he aprovechado otro codigo que teneis en los ejemplos:
Por ahora hay una serie puesta a pelo, pero bueno, son las tonterias que me faltan por modificar.
Gracias de nuevo
Carlos.
Code: Select all
tempX = tChart.getAxes().getBottom().calcPosPoint(e.getX());
Series lineSeries = tChart.getSeries(3);
pointIndex = getNearestPoint(lineSeries, e.getX(), e.getY());
int i = (int)Math.round(tempX);
try
{
tempY = lineSeries.getYValues().getValue(pointIndex);
}
catch(ArrayIndexOutOfBoundsException ee)
{
ee.printStackTrace();
return;
}
com.steema.teechart.tools.Annotation anno=new com.steema.teechart.tools.Annotation(tChart.getChart());
anno.setText(Double.toString(tempX) +", "+ Double.toString(tempY));
anno.setLeft(lineSeries.calcXPos(pointIndex));
anno.setTop(lineSeries.calcYPos(pointIndex));
tChart.repaint();
Code: Select all
private int getNearestPoint(Series aSeries, int x, int y) {
int tmpResult = -1;
int difference = -1;
int tmpDif, tmpX, tmpY;
for (int t=0; t < aSeries.getCount(); t++) {
tmpX = aSeries.calcXPos(t) - x;
tmpY = aSeries.calcYPos(t) - y;
tmpDif = MathUtils.round(Math.sqrt(MathUtils.sqr(tmpX) + MathUtils.sqr(tmpY)));
if ((difference==-1) || (tmpDif<difference)) {
difference = tmpDif;
tmpResult = t;
}
}
return tmpResult;
}
Code: Select all
public void mouseDragged(MouseEvent e) {
for(int i=0; i<tChart.getTools().size(); i++){
if (tChart.getTools().getTool(i) instanceof com.steema.teechart.tools.Annotation) {
tChart.getTools().remove(i);
}
}
pointIndex = -1;
}
Gracias de nuevo
Carlos.