Boa tarde a todos.
Tenho um sistema com um JFrame principal e diversos JDialog secundários utilizando JTables. Criei um TableModel para cada JDialog.
Ao iniciar o aplicativo, esses JDialogs são carregados, porém são exibidos apenas quando o usuário clica em determinado botão da seguinte maneira:
JFrame - Principal
JDialog - Clientes
JDialog - Produtos
JDialog - Categorias
…
Tanto dentro do JFrame Principal, quanto dentro do JDialog, tenho a opção de criar/atualizar um cliente, produto, …
O que gostaria de saber é como poderia fazer para quando fosse criando/atualizado um novo Cliente, Produto, …, os dados da tabelas sejam
atualizados.
Segue código utilizado
// JFrame Principal
// Dialogs
protected DialogCarregandoAplicacao dialogCarregandoAplicacao;
protected DialogClienteList dialogClienteList;
protected DialogClienteNovo dialogClienteNovo;
protected DialogProdutoList dialogProdutoList;
protected Cliente c;
protected JTextArea textArea;
protected JScrollPane pane;
public Principal() {
}
public Principal(LayoutManager layout) {
super(layout);
//Lay out the content pane.
setPreferredSize(new Dimension(450, 150));
initComponents(); // Carrega componentes
initDialogs(); // Carrega Dialogs
}
public void initComponents() {
//Create a scrolled text area.
textArea = new JTextArea(5, 30);
textArea.setEditable(false);
pane = new JScrollPane(textArea);
add(pane, BorderLayout.CENTER);
}
public void initDialogs() {
dialogClienteList = new DialogClienteList();
dialogClienteNovo = new DialogClienteNovo();
dialogProdutoList = new DialogProdutoList();
}
// Funçoes para criar menus e actions
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true); // Remove a barra de titulos
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Define o tamanho como maximizado
//Create/set menu bar and content pane.
Principal demo = new Principal(new BorderLayout());
frame.setJMenuBar(demo.createMenuBar()); // Criar o menuBar
demo.createToolBar(); // Cria um toolBar com botoes
demo.setOpaque(true); //content panes must be opaque
frame.setContentPane(demo);
demo.dialogCarregandoAplicacao.dispose();
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, "Classe nao encontrada! "+ex);
} catch (InstantiationException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, "Erro de Instanciacao! "+ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, "Acesso Ilegal! "+ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
}
//
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
// Código do action que abre o dialog que criar um cliente novo
@SuppressWarnings("serial")
public class novoClienteAction extends AbstractAction {
public novoClienteAction(String text, String desc, Integer mnemonic) {
super(text);
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
dialogClienteNovo.setVisible(true);
}
}
// Código da action que exibe a JDialog que contém o JTable que desejo ser atualizado ao criar/atualizar um Cliente
@SuppressWarnings("serial")
public class consultaClienteAction extends AbstractAction {
public consultaClienteAction(String text, String desc, Integer mnemonic) {
super(text);
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
dialogClienteList.setVisible(true);
}
}
Código do JDialog que contém a JTable
private JTable table = new JTable();
private TableRowSorter<tmClientes> sorter;
private List<Cliente> lista;
private ClienteDAO cDAO;
public DialogClienteList() {
setUndecorated(true); // Remove a barra de titulo
// Iniciar components, tabela e actions
initActions(); // Inicia as actions
initComponents(); // Inicia os componentes (Botoes, DAO, Entity Cliente, JTextFields, JButtons, ...
initTable();
createGUI();
}
public void initTable() {
table.setModel(new tmClientes(lista));
table.setPreferredScrollableViewportSize(new Dimension(1000,300));
table.setFillsViewportHeight(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Nas proximas duas linhas e criado e definido que nossa tabela agora,
// podera ordenar os dados, clicando no nome da coluna correspondente
sorter = new TableRowSorter<tmClientes>((tmClientes)table.getModel());
table.setRowSorter(sorter);
// Parte personalizada onde pega-se o total de colunas que a tabela possui
// e percorre uma a uma indicando seu tamanho
int total = ((tmClientes) table.getModel()).getTamanhoColunas().length;
for (int i = 0 ; i < total ; i++) {
TableColumn column = (TableColumn)table.getColumnModel().getColumn(i);
column.setMinWidth(((tmClientes)table.getModel()).getTamanhoColunas()[i]);
}
pane = new JScrollPane(table);
pack();
}
Desde ja agradeço a atenção.
Obrigado