Estou usando a biblioteca JMathPlot para fazer um gráfico. Tive algum trabalho para inserir um ícone perto do eixo x do gráfico, representando (teoricamente) algum comportamento específico do gráfico na posição do ícone. O código abaixo gera pontos aleatórios e faz um gráfico de linha (“LinePlot”), e insere o ícone em uma posição aleatória abaixo do eixo x. A minha pergunta é: como tornar essa figura clicável (e o clique nela abrir uma janela)??? A classe PlotableImage não tem nenhum método addMouseListener. Pensei também em inserir a imagem usando talvez um JLabel em cima do gráfico, mas como faria para posicioná-la no gráfico, usando as coordenadas do gráfico? Help!!! =)
E aproveitando o ensejo, também gostaria muito de saber se existe uma forma de abaixar um pouco os valores da escala do eixo x, de forma a deixar um espaço maior entre esses numerinhos e o eixo em si, pra poder aumentar a imagem.
p.s. o código todo para a figura é porque na biblioteca parece que não existe um jeito muito fácil de fazer isso. Sempre que a escala dos eixos do gráfico muda, a figura se modifica também, então o que tentei criar foi um artifício pra imagem ficar mais ou menos de tamanho constante, através de alguns cálculos malucos…
[code]import java.io.File;
import java.util.Random;
import javax.swing.JFrame;
import org.math.plot.Plot2DPanel;
import org.math.plot.plotObjects.PlotableImage;
public class Test {
//constants
public static final int
MAX_X = 10000,
MAX_Y = 40,
MAX_POINTS = 100,
MIN_POINTS = 10;
public static void main(String[] args) {
Random r = new Random();
int n_points = r.nextInt(MAX_POINTS) + MIN_POINTS; // at least 10 points
double[] x = new double[n_points];
double[] y = new double[n_points];
double max_x; // max value of x
double x_interval = (max_x = (double)r.nextInt(MAX_X)) / (double) n_points; // x-interval between points
double max_y = r.nextFloat()*MAX_Y; // max value of y
for (int i = 0; i < n_points; i++) {
x[i] = i * x_interval;
y[i] = r.nextFloat() * max_y;
}
Plot2DPanel plot = new Plot2DPanel();
plot.addLinePlot("Random plot", x, y);
// the image's x and y coordinates
// follows graph's coordinate system
// (not the frame's)
//
// nw
// .
// .
// sw....se
double x_icon = r.nextDouble() * max_x;
double deviation = .015 * max_x;
double y_icon = -.007 * max_y;
double icon_height = -.04 * max_y;
File fimg = new File("img/t.gif"); //quadrado preto 64x64
double[] sw = {x_icon - deviation, icon_height};
double[] se = {x_icon + deviation, icon_height};
double[] nw = {x_icon - deviation, y_icon};
PlotableImage img = new PlotableImage(fimg, 1, sw, se, nw);
plot.addPlotable(img);
JFrame frame = new JFrame("a plot panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setContentPane(plot);
frame.setVisible(true);
}
}[/code]