Estou com dificuldade de criar uma interface dinâmica, o propósito do programa é: um usuário escolhe um arquivo csv, depois clica no botão carregar, depois de carregar a interface gera um menu dropdown com as propriedades, e tem outro menu dropdown que vai gerar graficos. o problema é que eu não sei como mudar o que está dentro do container de uma maneira dinâmica.
O código:
`package codigo;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Interface extends JFrame implements ItemListener, ActionListener {
private JComboBox<String> combo, charts;
private JButton bt_open, bt_load;
public Data d = new Data();
private JPanel panel, graficos;
private Graficos g;
private pieChart p;
public Object getObject() {
return d;
}
public Interface(String s) {
super(s);
Container c = getContentPane();
bt_open = new JButton("Abrir");
bt_open.addActionListener(this);
bt_load = new JButton("Carregar");
bt_load.addActionListener(this);
//Define um JComboBox que será preenchido dinamicamente depois de escolher o .CSV
combo = new JComboBox<String>();
combo.addItemListener(this);
//Define a lista de visualização dos graficos
charts = new JComboBox<String>();
charts.addItem("Grafico de Pizza");
charts.addItem("Grafico de Barra");
charts.addItem("Tabela");
charts.addItem("Tabela da Media");
//Cria um painal para os menus
panel = new JPanel();
panel.setLayout(new GridLayout(1, 4));
panel.add(bt_open);
panel.add(bt_load);
panel.add(combo);
panel.add(charts);
//Inicia o painel de gráficos
graficos = pieChart.createDemoPanel(); //é uma classe em que esse método retorna um objeto JPanel
//Add itens into the window
c.add(BorderLayout.NORTH, panel);
c.add(BorderLayout.CENTER, graficos);
//Defines the layout of the window
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
new Interface("Protótipo");
}
@Override
public void itemStateChanged(ItemEvent e) {
//Combo changed
if (e.getSource() == combo) {
if (e.getStateChange() == ItemEvent.SELECTED) {
String[][] Array;
Array = d.getPropertyInfo(combo.getSelectedIndex());
}
}
//Lista de graficos muda
if (e.getSource() == charts) {
//grafico de pizza
if (charts.getSelectedIndex() == 0) { //se o indice selecionado no menu dropdown for 0, ele tem que mudar o grafico para o de pizza
graficos = pizza; //apenas um exemplo << é aqui que o conteudo do JPanel grafico não muda, eu estou atribuindo com um objeto JPanel.
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
//Open .csv file
if (e.getSource() == bt_open) {
File f = null;
JFileChooser c = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"CSV files", "csv");
c.setFileFilter(filter);
int returnVal = c.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You choose this file: "
+ c.getSelectedFile().getName());
}
f = c.getSelectedFile();
d.setFile(f);
}
//Carrega propriedades no JCombo dinamicamente
if (e.getSource() == bt_load) {
d.setProperties();
for (int i = 0; i < d.propertyNum; i++) {
combo.addItem(d.properties[i]);
}
}
}
}`