Clique em Área + Gambearra num RadioButton

0 respostas
J

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.

Criado 9 de março de 2007
Respostas 0
Participantes 1