Eu estou com dúvida, quanto a maneira com a qual eu faço um gráfico receber valores e mudar de acordo com eles.
Eu quero que o meu gráfico mostre o percentual de massa gorda e magra, para isso eu devo passar o resultado de um cálculo, mais não sei como fazer isso.
Como eu pego o valor do calculo, e faço o gráfico receber ele? Assim, o gráfico vai mudar de acordo com esses valores. No meu caso esse valor vai ser a massa gorda e massa magra de uma pessoa.
No exemplo, eu coloquei apenas o calculo da massa gorda, no caso de ser necessário um valor para a % de massa magra, adicione um valor qualquer, apenas para fim explicativo, pois o problema não é como fazer o calculo.
o código:
package jfreechart;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;
public class GraficoTeste extends JFrame
{
private static final long serialVersionUID = 1L;
private PieDataset dataset;
private JFreeChart grafico;
private final JTextField altura = new JTextField();
private final JTextField peso = new JTextField();
private final JButton calcular = new JButton("Calcular");
private final JLabel imc = new JLabel();
private double calcMassas;
public GraficoTeste()
{
setSize(500, 400);
JPanel contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
add(colocaCampos());
add(colocaGrafico());
acao();
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void acao()
{
calcular.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
calculo();
}
});
}
public void calculo()
{
//Cálculo IMC.
double alt = Double.parseDouble(altura.getText());
double ps = Double.parseDouble(peso.getText());
double resultado = ps / ((alt)*(alt));
imc.setText("O IMC é: " + resultado);
//Cálculo Massa magra e gordura. ex: (1,20 x IMC) + (0,23 x idade) – (10,8 x sexo) – 5.4
calcMassas = (1.20 * resultado) + (0.23 * 20) - (10.8 * 1);
System.out.println("Massa - gordura: " + calcMassas);
}
public JComponent colocaCampos()
{
JPanel painelCampo = new JPanel();
JLabel labelAltura = new JLabel("Altura:");
painelCampo.add(labelAltura);
painelCampo.add(altura);
altura.setPreferredSize(new Dimension(100, 25));
JLabel labelPeso = new JLabel("Peso:");
painelCampo.add(labelPeso);
painelCampo.add(peso);
peso.setPreferredSize(new Dimension(100, 25));
painelCampo.add(calcular);
calcular.setPreferredSize(new Dimension(100, 23));
return painelCampo;
}
public JComponent colocaGrafico()
{
JPanel painelG = new JPanel();
//cria o dataset
dataset = criaDataset();
//baseando no dataset criamos o gráfico
grafico = criaGrafico(dataset, "");
//insere o painel no gráfico
ChartPanel painelGrafico = new ChartPanel(grafico);
//tamanho padrão
painelGrafico.setPreferredSize(new Dimension(400, 200));
painelG.add(painelGrafico);
painelG.add(imc);
imc.setText("");
return painelG;
}
//cria um simples dataset
private DefaultPieDataset criaDataset()
{
DefaultPieDataset resultado = new DefaultPieDataset();
resultado.setValue("Vermelho", 20);
resultado.setValue("Azul", 80);
return resultado;
}
//cria o gráfico
private JFreeChart criaGrafico(PieDataset dataset, String titulo)
{
JFreeChart graf = ChartFactory.createPieChart3D(
titulo, dataset, true, true, false);
PiePlot3D enredo = (PiePlot3D) graf.getPlot();
enredo.setStartAngle(290);
enredo.setDirection(Rotation.CLOCKWISE);
enredo.setForegroundAlpha(0.5f);
return graf;
}
public static void main(String[] args)
{
GraficoTeste t = new GraficoTeste();
t.setVisible(true);
}
}