Como fazer para o MouseListener entender que foi clicado numa determinada área de um desenho?
Por exemplo:
Eu tenho uma janela me mostrando um gráfico, e eu clico em uma das barras do gráfico e ele me abre um MessageDialog contendo os numeros daquela barra.
Alias num teste aqui, eu testei o MouseListener clicando no painel do gráfico, depois q eu mudei pro outro gráfico, o Listener naum funcionou mais, e quando voltei pro primeiro, também não funcionou.
Ou seja só funcionou 1 vez quando o programa foi executado.
==================
A segunda dúvida eu vou postar o código:
package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.event.ChartChangeEvent;
import org.jfree.chart.event.ChartChangeListener;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.util.TableOrder;
import org.w3c.dom.events.MouseEvent;
public class WinPanel extends JFrame implements ActionListener, MouseListener {
/**
*
*/
private JPanel painel;
private JRadioButton barra, pizza;
private ButtonGroup radioGroup;
private JFreeChart jFChartB, jFChartP;
private ChartPanel cPanel;
private Container cont;
private JLabel lbl;
public WinPanel(){
super("BarraPizza");
cont = getContentPane();
cont.setLayout(new BorderLayout(2,2));
painel = new JPanel();
painel.setLayout(new FlowLayout(FlowLayout.CENTER));
lbl = new JLabel("", JLabel.CENTER);
radioGroup = new ButtonGroup();
barra = new JRadioButton("Barra", true);
pizza = new JRadioButton("Pizza", false);
radioGroup.add(barra);
radioGroup.add(pizza);
cont.add(lbl, BorderLayout.CENTER);
cont.add(painel, BorderLayout.SOUTH);
painel.add(barra);
painel.add(pizza);
setChartB();
barra.addActionListener(this);
pizza.addActionListener(this);
cPanel.addMouseListener(this);
setSize(400, 300);
setLocation(300, 250);
setVisible(true);
setResizable(false);
}
private JFreeChart createChart(CategoryDataset dSet){
jFChartB = ChartFactory.createBarChart3D("Barra", "Categoria", "Valor", dSet, PlotOrientation.VERTICAL, true, true, false);
return jFChartB;
}
private JFreeChart createChartP(CategoryDataset dSet){
jFChartP = ChartFactory.createMultiplePieChart3D("Pizza", dSet, TableOrder.BY_COLUMN , true, true, false);
return jFChartP;
}
private static CategoryDataset getDataSet(){
DefaultCategoryDataset result = new DefaultCategoryDataset();
result.addValue(5.1, "Real", "Eficiência");
result.addValue(4.3, "Objetivo", "Eficiência");
result.addValue(6.5, "Real", "Eficiência");
result.addValue(3.3, "Objetivo", "Eficiência");
result.addValue(0.9, "Real", "Eficiência");
result.addValue(2.6, "Objetivo", "Eficiência");
result.addValue(6.1, "Real", "Produtividade");
result.addValue(2.3, "Objetivo", "Produtividade");
result.addValue(1.5, "Real", "Produtividade");
result.addValue(8.3, "Objetivo", "Produtividade");
result.addValue(4.9, "Real", "Produtividade");
result.addValue(5.6, "Objetivo", "Produtividade");
return result;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == barra){
cont.remove(cPanel);
setChartB();
#lbl.setText(" ");
}
else if (e.getSource() == pizza){
cont.remove(cPanel);
setChartP();
#lbl.setText(" ");
}
}
public void setChartB(){
cPanel = new ChartPanel(createChart(getDataSet()));
cont.add(cPanel, BorderLayout.CENTER);
}
public void setChartP(){
cPanel = new ChartPanel(createChartP(getDataSet()));
cont.add(cPanel, BorderLayout.CENTER);
}
public void mouseClicked(java.awt.event.MouseEvent e) {
if (e.getClickCount() >= 2){
JOptionPane.showMessageDialog(this, "");
}
}
public void mousePressed(java.awt.event.MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(java.awt.event.MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseEntered(java.awt.event.MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(java.awt.event.MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
Olhem o método actionPerformed (eu marquei com um '#' a chave do problema)
ali está a gamberra e eu queria tirar isso.
Eu consegui fazer com que o RadioButton trocasse os gráficos, entretanto ele só funciona com essa gambearra.
o Label (lbl) está com um set text de 2 caracteres de espaço em branco diferente, e é esse o motivo dele funcionar.
se eu tiro isso ou coloco 2 caracteres iguais, a troca dos gráficos não funcina mais, alias, o painel dos graficos nem aparece no Container.
E eu naum consigo imaginar uma alternativa pra isso, pois ja tentei tudo q me veio a cabeça.