Bom dia, pessoal!!!
Eu estou contruindo um pequeno projeto no qual eu construi o código abaixo que executa perfeitamente:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Image;
import java.text.DecimalFormat;
import javax.swing.ImageIcon;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class GraficoTeste extends javax.swing.JFrame{
public GraficoTeste() {
initComponents();
CategoryDataset dataset = createDataset();
JFreeChart chart = createBarChart(dataset);
ChartPanel panel = new ChartPanel(chart);
panel.setPreferredSize(new Dimension(500, 500));
setContentPane(panel);
}
@SuppressWarnings("unchecked")
private void initComponents() {...}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GraficoTeste chart = new GraficoTeste();
chart.setTitle("Grafico");
chart.setVisible(true);
chart.setSize(400, 400);
}
});
}
private CategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(6, "Preto", "");
dataset.addValue(4, "azul", "Fiesta");
return dataset;
}
private JFreeChart createBarChart(CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart(
"Escolha de cor por veículo", // adicionando título
"Veículo",
"Quantidade",
dataset,
PlotOrientation.VERTICAL,
false, false, false);
//instanciar gráfico
final CategoryPlot plot = chart.getCategoryPlot();
// mudar cor do fundo
//plot.setBackgroundPaint(Color.pink);
final ImageIcon imageIcon = new ImageIcon(getClass().getResource("ImagemQuadroBranco.png"));
Image image = imageIcon.getImage();
//adcionando imagem de fundo
plot.setBackgroundImage(image);
//mudar a cor da linha horizontal
//plot.setRangeGridlinePaint(Color.white);
//tirar as linhas horizontais
//plot.setRangeGridlinesVisible(false);
// desativar linhas de barras ...
final BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(true); //linha envolvendo o grafico
// renderer.setMaxBarWidth(0,10);
// Define o eixo de gama (y) para exibir apenas números inteiros ...
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setUpperMargin(1.0);
//A fim de obter valor percentual sobre o eixo y
rangeAxis.setTickUnit(new NumberTickUnit(1, new DecimalFormat("##0%")));
//fazer o eixo ficar próximos do menor valor
rangeAxis.setAutoRangeIncludesZero(false);
final GradientPaint gp0 = new GradientPaint(
0.0f, 0.0f, Color.blue,//alterar a cor da barra
0.0f, 0.0f, Color.lightGray);
// set up gradient paints for series...
final GradientPaint gp1 = new GradientPaint(
0.0f, 0.0f, Color.green,
0.0f, 0.0f, Color.lightGray);
renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(1, gp1);
return chart;
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
}
Porém, eu tenho que adicionar este gráfico dentro de um segundo panel, ou seja, construi um novo frame que possui apenas um painel, então pensei em alterar o frame anterior para JPanel, mas muitos erros estão sendo apresentados. A alteração ocorrida está presente apenas no construtor e na extenção da classe:
public class GraficoTeste extends javax.swing.JPanel{ //Agora para jpanel
public GraficoTeste() {
initComponents();
CategoryDataset dataset = createDataset();
JFreeChart chart = createBarChart(dataset);
ChartPanel panel = new ChartPanel(chart);
panel.setPreferredSize(new Dimension(500, 500));
// setContentPane(panel);
NovoFrame n = new NovoFrame();
n.jPanel1.add(panel);
}
Os erros estão sendo apresentados no método initComponents() nas linhas abaixo:
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
Alguém tem alguma sugestão para eu corrigir estes erros?
Grata!