JFreeChart no SWT

Caros colegas bom dia

gostaria de saber se alguém poderia me dar uma ajuda para criar um gráfico do JFreeChart no SWT, mas sem que eu use BufferedImage (porque gostaria que os ToolTipText continuem aparecendo).

Há outro problema, eu gostaria de criar um gráfico numa outra tela ou seja, no caso de eu criar um gráfico numa janela separada (swing). Quando eu fecho a janela do swing/application frame, ele acaba fechando a minha aplicação SWT também. Tem como fazer com que ele somente feche a janela do swing em vez de fechar tudo? (Obs.: o defaultCloseOperation já foi testado com DISPOSE_ON_CLOSE e DO_NOTHING_ON_CLOSE, independente de um ou outro, dá o mesmo erro :frowning: )

alguém poderia me ajudar?

aew tambem to procurando essa solução sera que vc ja conseguiu resolver???

Swing e SWT não se misturam “muito bem”. Tente a dica “Recipe 9.19: Using Swing and AWT Inside SWT (Eclipse 3.0)”

http://www.onjava.com/pub/a/onjava/excerpt/eclipseckbk_chap1/index1.html

Vlw esse composite resolve meu problema agora vou juntar os graficos do JFreeChar com SWT

Depois de terminar eu posto o codigo fonte de como fiz aqui

Vlw

SEGUE ABAIXO O CODIGO
ESTA FUNCIONANDO SO QUE AS IMAGEM SE EMBARALHAM QUANDO FICA TROCANDO DE IMAGEM

Como havia prometido estopu postando aqui a minha solução so encontrei um probleminha se alguem poder resolver e postar aqui agradeço
PS : esta funcionando o problema esta na troca de imagem

A CLASSE DOS GRAFICOS

import java.awt.Color;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class Graficos {

public Graficos(){

}

public JFreeChart pizza(){
	
	DefaultPieDataset pieData = new DefaultPieDataset();
        pieData.setValue("Retornados", 50);
        pieData.setValue("Enviados", 70);
        
        //Criação da pizza3d
        JFreeChart chart = ChartFactory.createPieChart("Pizza", pieData, true, true, false);
        
        return chart;

}
public JFreeChart pizza3d(){
	
	DefaultPieDataset pieData = new DefaultPieDataset();
    pieData.setValue("Retornados", 100);
    pieData.setValue("Enviados", 70);
    
    // Criação da pizza3d
    JFreeChart chart = ChartFactory.createPieChart3D("Modelo Pizza", pieData, true, true, false);
    
    PiePlot3D plot = (PiePlot3D) chart.getPlot();

	// Posição da pizza
	plot.setStartAngle(240);
	// Trasparencia da Pizza
	plot.setForegroundAlpha(0.5f);
	// Define o Tamanho da Pizza
	plot.setInteriorGap(0.33);
    return chart;
}
public JFreeChart barra(){
	DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	dataset.addValue(1.0, "Retornaveis", "");
	dataset.addValue(2.0, "Imoveis Retornados", "");
	dataset.addValue(3.0, "Leituras Retornadas", "");
	dataset.addValue(5.0, "Faturas Impressas", "");

	JFreeChart chart = ChartFactory.createBarChart3D("Modelo BarChart","","",dataset,PlotOrientation.VERTICAL,
	true, // Inclusão da Legenda
	true,false );
			
			//Cor de Fundo de tela do Charts
			chart.setBackgroundPaint(Color.lightGray);
			CategoryPlot plot = chart.getCategoryPlot();
			//Cor de Fundo do Chrats
			plot.setBackgroundPaint(Color.lightGray);
			//Cor de linha vertical de Fundo do charts 
			plot.setDomainGridlinePaint(Color.black);
			//permição de visualização de linha
			plot.setDomainGridlinesVisible(true);
			//Cor de linha Horizontal de Fundo do charts 
			plot.setRangeGridlinePaint(Color.black);
			// set the range axis to display integers only...
			final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
			rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
			// Monta as cores das barras
			BarRenderer renderer = (BarRenderer) plot.getRenderer();
			renderer.setDrawBarOutline(false);
			// Adiciona cada tipo de car para cada Barra
			renderer.setSeriesPaint(0, Color.red);
			renderer.setSeriesPaint(1, Color.green);
			renderer.setSeriesPaint(2, Color.blue);
			renderer.setSeriesPaint(4, Color.yellow);
			CategoryAxis domainAxis = plot.getDomainAxis();
			domainAxis.setCategoryLabelPositions(
			CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));

		return chart;
		}
}

A CLASSE DE EXECUÇÃO DOS GRAFICOS

import java.awt.Frame;
import java.awt.GridLayout;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;

public class JfreeChart {

protected static Composite chartComposite;
protected static Graficos grafico;
protected static Frame chartFrame;
protected static JFreeChart monta; 

private void executar(){
	
	Display display = new Display();
	final Shell shell = new Shell(display);
	

	//Montando A area para colocar os Graficos
	grafico = new Graficos();
	chartComposite = new Composite(shell, SWT.EMBEDDED);
	chartComposite.setLayoutData(new GridLayout());
	chartComposite.setLocation(250, 10);
	chartComposite.setSize(400, 373);
	shell.setLayout(null);
	
	final Menu menu = new Menu(shell, SWT.BAR);
	shell.setMenuBar(menu);

	final MenuItem menuItem = new MenuItem(menu, SWT.CASCADE);
	menuItem.setText("Menu");

	final Menu menu_1 = new Menu(menuItem);
	menuItem.setMenu(menu_1);

	//Menu Sair
	final MenuItem sairMenuItem = new MenuItem(menu_1, SWT.NONE);
	sairMenuItem.addSelectionListener(new SelectionAdapter() {
		public void widgetSelected(final SelectionEvent e) {
			System.exit(0);
		}
	});
	sairMenuItem.setText("Sair");

	final Tree t = new Tree(shell, SWT.BORDER | SWT.MULTI |SWT.V_SCROLL);
	t.setBounds(0, 10, 237, 373);
	
	final TreeItem modelos = new TreeItem(t, SWT.NONE);
	modelos.setText("Modelos de Graficos");
	
	final TreeItem barchart = new TreeItem(modelos, SWT.NONE);
	barchart.setText("BarChart");

	final TreeItem pizza3d = new TreeItem(modelos, SWT.NONE);
	pizza3d.setText("Pizza 3D");
	
	
	
	
	t.addListener (SWT.MouseDown, new Listener () {
		public void handleEvent (Event event) {
			Point point = new Point (event.x, event.y);
			TreeItem item = t.getItem (point);
			 chartFrame = null;
			
			
			if (item != null) {
				
				if(item == barchart){
					monta = grafico.barra();
					// Adicionando o frame a SWT_AWT
					chartFrame = null;
					chartFrame = SWT_AWT.new_Frame(chartComposite);
					ChartPanel cp = new ChartPanel(monta);
					chartFrame.add(cp);
					System.out.println("BarChart");
				}else{
					if(item == pizza3d){
						monta = grafico.pizza3d();
						// Adicionando o frame a SWT_AWT
						chartFrame = null;
						chartFrame = SWT_AWT.new_Frame(chartComposite);
						ChartPanel cp = new ChartPanel(monta);
						chartFrame.add(cp);
						System.out.println("Pizza3D");
					}
				}
			}
		}
	});
	
	shell.open();
	shell.pack();
	shell.setSize(669, 454);
	while (!shell.isDisposed()) {
		if (!display.readAndDispatch())
			display.sleep();
	}
	display.dispose();
}

public static void main(String[] args) {
	JfreeChart instancia = new JfreeChart();
	instancia.executar();
}

}

[quote=Leozin]Quando eu fecho a janela do swing/application frame, ele acaba fechando a minha aplicação SWT também. Tem como fazer com que ele somente feche a janela do swing em vez de fechar tudo? (Obs.: o defaultCloseOperation já foi testado com DISPOSE_ON_CLOSE e DO_NOTHING_ON_CLOSE, independente de um ou outro, dá o mesmo erro :frowning: )

alguém poderia me ajudar?[/quote]

Leozin, eu também estava enfrentando esse problema (só que na minha aplicação eu criava uma cópia modificada do “DualAxisDemo4” (org.jfree.chart.demo)). O resolvi comentando o seguinte trecho do método da Classe “Application Frame”:

public void windowClosing(final WindowEvent event) {
    if (event.getWindow() == this) {
        dispose();
        //System.exit(0); ~> COMENTADO!!!
    }
}

Como a minha aplicação estende à ApplicationFrame, bastou apenas pressionar o Ctrl e clicar com o botão esquerdo do mouse para abrí-la.

Espero que ajude…