Erro ao alterar um jFrame para jPanel

11 respostas
vanessa.tenorio

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!

11 Respostas

ViniGodoy

ahem… quais erros são apresentados?

vanessa.tenorio

Vini, para todos as linhas, o erro apresentado é: cannot find symbol.

ViniGodoy

vanessa.tenorio:
Vini, para todos as linhas, o erro apresentado é: cannot find symbol.

Isso geralmente é apresentado quando faltou declarar uma variável.

vanessa.tenorio

Uma solução para eliminar visivelmente estes erros, são criando métodos para os mesmos na classe, por exemplo:

private void setDefaultCloseOperation(int DISPOSE_ON_CLOSE) { throw new UnsupportedOperationException("Not yet implemented"); }
Porém, ao executar, são apresentados muitos erros, em particular destaco:
Exception in thread “AWT-EventQueue-0” java.lang.UnsupportedOperationException: Not yet implemented

Onde devo alterar?
Grata!

ViniGodoy

Você pode ressaltar em que linhas esses erros estão ocorrendo?

Provavelmente você está chamando esse método em uma classe que não é o JFrame. Uma possibilidade seria numa inner class.

Não adianta criar métodos como esse que vc falou. Não resolve o problema.

E

Se você vai transformar um JFrame em um JPanel, esteja ciente que há vários métodos que você não precisa chamar.

Um deles é o setDefaultCloseOperation - como um JPanel não tem um botão de fechar, não faz sentido você chamar esse método, OK?

Então não adianta você ficar tentando chamar coisas que não fazem sentido, ou então criar métodos vazios que não fazem o que está escrito no nome do método, só para forçar a compilação a dar certo.

Você tem de entender o programa que você fez (ou que o editor gráfico escreveu parcialmente para você), em vez de ficar tentando fazer as coisas às cegas, sem entender.

vanessa.tenorio

ViniGodoy:
Você pode ressaltar em que linhas esses erros estão ocorrendo?

Provavelmente você está chamando esse método em uma classe que não é o JFrame. Uma possibilidade seria numa inner class.

Não adianta criar métodos como esse que vc falou. Não resolve o problema.


Segue abaixo o código e destaquei as linhas com erro:

import java.awt.Color;
import java.awt.Container;
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.JPanel{
        
    /** Creates new form GraficoTeste */
    public GraficoTeste() {
        initComponents();
        
        CategoryDataset dataset = createDataset();

        JFreeChart chart = createBarChart(dataset);

        ChartPanel panel = new ChartPanel(chart);

        panel.setPreferredSize(new Dimension(500, 500));

     //jPanel1.add(panel);

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); //ERRO

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        jButton1.setText("jButton1");

        jButton2.setText("jButton2");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); //ERRO
        getContentPane().setLayout(layout); //ERRO
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(59, 59, 59)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 126, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(69, 69, 69))
            .addGroup(layout.createSequentialGroup()
                .addGap(145, 145, 145)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(155, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addGap(56, 56, 56)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(92, Short.MAX_VALUE))
        );

        pack(); //ERRO

    }// </editor-fold>

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
               /* Create and display the form */
        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.JButton jButton1;
    private javax.swing.JButton jButton2;
    public javax.swing.JPanel jPanel1;
    // End of variables declaration
  
}

Obrigada pela atenção!

ViniGodoy

Ok, como corrigir:

  1. Apague a linha 45. O JPanel não tem “DefaultCloseOperation” pois quem fecha não é o JPanel, mas a janela onde o painel está.
  2. As linhas 62 e 63 ficam assim:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); setLayout(layout);

“ContentPane” é o painel principal de um JFrame. Nesse caso, estamos dizendo que esse painel é o próprio painel que vc está implementando (this).

vanessa.tenorio

entanglement:
Se você vai transformar um JFrame em um JPanel, esteja ciente que há vários métodos que você não precisa chamar.

Um deles é o setDefaultCloseOperation - como um JPanel não tem um botão de fechar, não faz sentido você chamar esse método, OK?

Então não adianta você ficar tentando chamar coisas que não fazem sentido, ou então criar métodos vazios que não fazem o que está escrito no nome do método, só para forçar a compilação a dar certo.

Você tem de entender o programa que você fez (ou que o editor gráfico escreveu parcialmente para você), em vez de ficar tentando fazer as coisas às cegas, sem entender.


Partindo da minha classe que anteriormente era frame, como posso alterar meu código para esta extender a panel, removendo estes erros?

Grata!!!

ViniGodoy

Ele já deu a resposta:

Não programe por tentativa e erro.
O code completion foi feito para ajudar o programador, não para fazer o trabalho por ele.

vanessa.tenorio

Muito obrigada pela ajuda!!!
Desenvolvi uma segunda classe, portadora de código abaixo, e criei um frame de teste contendo apenas um painel, como posso estar inserindo um painel “dentro” do outro, pois quero que os gráficos cridos em um painel, seja visivel em outro, de uma segunda classe?

import java.awt.Dimension;

import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarsGraphic extends JPanel {

    public BarsGraphic(String title) {

        CategoryDataset dataset = BarsGraphic.createDataset();
        JFreeChart chart = BarsGraphic.createBarChart(dataset);
        ChartPanel panel = new ChartPanel(chart);
        panel.setPreferredSize(new Dimension(400, 300));
        teste teste = new teste();
//setContentPane(panel);
   teste.jPanel1.add(panel); //ERRO
//        getComponentCount();

    }

    private static CategoryDataset createDataset() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(6, "Preto", "Corsa");
        dataset.addValue(4, "Preto", "Fiesta");
                return dataset;
    }

    private static JFreeChart createBarChart(CategoryDataset dataset) {
        JFreeChart chart = ChartFactory.createBarChart(
                "Escolha de cor por veículo", //Titulo
                "Veículo", // Eixo X
                "Quantidade", //Eixo Y
                dataset, // Dados para o grafico
                PlotOrientation.VERTICAL, //Orientacao do grafico
                true, false, false); // exibir: legendas, tooltips, url
        return chart;
    }

    public static void main(String[] args) {
        BarsGraphic chart = new BarsGraphic("Teste Bar Chart");
    //    chart.pack();
        chart.setVisible(true);
    }
}

Grata!!!

Criado 10 de julho de 2012
Ultima resposta 10 de jul. de 2012
Respostas 11
Participantes 3