-1
I need to update a Jlabel every time I press a particular button that searches for a database form to generate a chart, but it only works the first time. My idea was this: if Jlabel is empty it adds the graph generated by the search, if it is filled it would remove the graph and put the new one. That’s how my Jframe got like this:
public class MyFrame extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyFrame frame = new MyFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MyFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblMeuIcone = new JLabel("");
lblMeuIcone.setBounds(23, 11, 363, 205);
contentPane.add(lblMeuIcone);
JButton btnTrocarI = new JButton("TrocarImagem");
btnTrocarI.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
GeradorDeGraficos graficos = new GeradorDeGraficos();
int[] valores = {1,1,2,23,3};
graficos.graficoPeriodoDeCrescimento(valores, "grafico 01", "valores", "valores");
try {
graficos.salvarGrafico(new FileOutputStream("MyChart01.png"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(lblMeuIcone.getIcon() == null) {
File file = new File("MyChart01.png");
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
lblMeuIcone.setIcon(icon);
}else {
lblMeuIcone.setIcon(null);
File file = new File("MyChart01.png");
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
lblMeuIcone.setIcon(icon);
}
}
});
btnTrocarI.setBounds(70, 227, 89, 23);
contentPane.add(btnTrocarI);
JButton btnTrocarII = new JButton("Trocar nova");
btnTrocarII.setBounds(311, 227, 89, 23);
btnTrocarII.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
GeradorDeGraficos graficos = new GeradorDeGraficos();
int[] valores = {10,5,6,23,33};
graficos.graficoPeriodoDeCrescimento(valores, "grafico 02", "valores", "valores");
try {
graficos.salvarGrafico(new FileOutputStream("MyChart01.png"));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(lblMeuIcone.getIcon() == null) {
File file = new File("MyChart01.png");
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
lblMeuIcone.setIcon(icon);
}else {
lblMeuIcone.setIcon(null);
File file = new File("MyChart01.png");
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
lblMeuIcone.setIcon(icon);
}
}
});
contentPane.add(btnTrocarII);
}
}
Class that generates the graph
public class GeradorDeGraficos {
private double[] valores;
private int inicio;
private int fim;
float dash[] = { 10.f };
private DefaultCategoryDataset data;
private JFreeChart grafico;
private JFreeChart graficoDeLinha;
public JFreeChart graficoPeriodoDeCrescimento(int[] lista, String titulo, String labelBottom, String labelLeft) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
try {
for (int i = 0; i < lista.length; i++) {
dataset.addValue(lista[i], "Média", "valor" + i);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "deu pau no grafico");
}
graficoDeLinha = ChartFactory.createLineChart(titulo, labelBottom, labelLeft, dataset, PlotOrientation.VERTICAL,
true, true, false);
// fonte
Font fonteNova = new Font("TimesRoman", Font.PLAIN, 18);
CategoryItemRenderer renderer = graficoDeLinha.getCategoryPlot().getRenderer();
CategoryPlot plot = graficoDeLinha.getCategoryPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.GREEN);
plot.setAxisOffset(new RectangleInsets(12.0, 12.0, 5.0, 5.0));
plot.setRangeGridlinePaint(Color.RED);
// cor e linha das séries
renderer.setSeriesPaint(0, Color.BLUE);
renderer.setSeriesStroke(0,
new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.f, dash, 0.0f));
renderer.setSeriesPositiveItemLabelPosition(0,
new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.BASELINE_CENTER));
renderer.setSeriesOutlineStroke(0,
new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.f, dash, 0.0f));
renderer.setSeriesOutlinePaint(0, Color.GREEN);
// legendas
LegendItemCollection legendas = new LegendItemCollection();
LegendItem legenda1 = new LegendItem("Crescimento");
legenda1.setSeriesIndex(0);
legenda1.setFillPaint(Color.BLUE);
legenda1.setLabelPaint(Color.BLUE);
legenda1.setLabelFont(fonteNova);
legendas.add(legenda1);
plot.setFixedLegendItems(legendas);
return graficoDeLinha;
}
public void salvarGrafico(OutputStream out) throws IOException {
ChartUtilities.writeChartAsPNG(out, graficoDeLinha, 300, 200);
}
}
any doubt just speak
Please provide a [mcve] so that it is possible to test the problem.
– user28595
The problem is that your code is not reproducible because it contains a database. Can you isolate the problem only in the mentioned button and label with some direct data in the code? Remove everything that is not necessary, leaving just enough to simulate your problem.
– user28595
That code is yours?
– Sveen
Add the Imports too, you’re giving error.
– user28595