Hi I'm trying to create a Panel that queries a database and updates a JTable. The table headers need to be capable of changing text whenever the language of the application changes (done in a separate dialog).
Right now the table is not being shown in the frame. I'm using tableModel.setIdentifiers to update the text in the header.

If anyone knows what I'm doing wrong here please let me know.

Thanks

Code follows and has been modified so that no database queries are done.

UpdateablePanel.java

Code:
    import java.awt.BorderLayout;  
    import java.awt.Color;  
    import java.awt.Dimension;  
    import java.awt.FlowLayout;  
    import java.awt.event.ActionEvent;  
    import java.awt.event.ActionListener;  
    import java.util.LinkedList;  
    import java.util.List;  
      
    import javax.swing.JButton;  
    import javax.swing.JFrame;  
    import javax.swing.JPanel;  
    import javax.swing.JTable;  
    import javax.swing.table.DefaultTableColumnModel;  
    import javax.swing.table.JTableHeader;  
    import javax.swing.table.TableColumn;  
      
    public class UpdateablePanel extends JPanel{  
        public static void main(String[] args){  
            JFrame frame = new JFrame("MyFrame");  
            frame.add(new UpdateablePanel());  
            frame.setSize(new Dimension(600,600));  
            frame.setVisible(true);  
        }  
        private ModifiableTableModel tableModel;  
        private JTableHeader tableHeader;  
        private DefaultTableColumnModel colModel;  
        private JTable table;  
      
        private JPanel buttonPanel;  
        private JButton refreshButton;  
      
        public UpdateablePanel(){  
            setLayout(new BorderLayout());  
      
            buttonPanel = new JPanel(new FlowLayout());  
            refreshButton = new JButton();  
            refreshButton.addActionListener(new ActionListener() {  
                @Override  
                public void actionPerformed(ActionEvent arg0) {  
                    refreshData();  
                }  
            });  
            buttonPanel.add(refreshButton);  
            add(buttonPanel,BorderLayout.NORTH);  
      
      
            colModel = new DefaultTableColumnModel();  
            colModel.addColumn(new TableColumn(0,75));  
            colModel.addColumn(new TableColumn(1,75));  
            colModel.addColumn(new TableColumn(2,75));  
            colModel.addColumn(new TableColumn(3,75));  
            colModel.addColumn(new TableColumn(4,75));  
            colModel.addColumn(new TableColumn(5,75));  
            colModel.addColumn(new TableColumn(6,75));  
            colModel.addColumn(new TableColumn(7,75));  
            colModel.addColumn(new TableColumn(8,75));  
      
            tableModel = new ModifiableTableModel();  
            tableModel.setTableEditable(false);  
      
            table = new JTable(tableModel,colModel);  
            tableHeader = table.getTableHeader();  
            tableHeader.setBackground(Color.blue);  
      
            add(table,BorderLayout.CENTER);  
      
            updateLabels();  
      
            refreshData();  
        }  
      
        public void refreshData(){  
            tableModel.clear();  
            for(int i = 0 ;i<20;i++){  
                List<Object> fieldList = new LinkedList<Object>();  
                for(int j=0;j<9;j++){  
                    fieldList.add("data");  
                }  
                tableModel.addRow(fieldList.toArray());  
            }  
        }  
      
        public void updateLabels() {  
            remove(table);  
            List<Object> identifiers = new LinkedList<Object>();  
            identifiers.add("ID");  
            identifiers.add("COLOUR");  
            identifiers.add("BIRTHDATE");  
            identifiers.add("GENDER");  
            identifiers.add("SIRE");  
            identifiers.add("DAM");  
            identifiers.add("BIRTHTYPE");  
            identifiers.add("STATE");  
            identifiers.add("MARKINGS");  
            tableModel.setColumnIdentifiers(identifiers.toArray());  
      
            refreshButton.setText("Refresh");  
      
            refreshData();  
            repaint();  
        }  
    }
ModifiableTableModel.java

Code:
    import java.util.Vector;  
      
    import javax.swing.table.DefaultTableModel;  
      
    public class ModifiableTableModel extends DefaultTableModel {  
      
        private boolean tableEditable = true;  
          
        public ModifiableTableModel() {  
            super();  
        }  
      
        public ModifiableTableModel(int arg0, int arg1) {  
            super(arg0, arg1);  
        }  
      
        public ModifiableTableModel(Object[] arg0, int arg1) {  
            super(arg0, arg1);  
        }  
      
        public ModifiableTableModel(Object[][] arg0, Object[] arg1) {  
            super(arg0, arg1);  
        }  
      
        public ModifiableTableModel(Vector arg0, int arg1) {  
            super(arg0, arg1);  
        }  
      
        public ModifiableTableModel(Vector arg0, Vector arg1) {  
            super(arg0, arg1);  
        }  
          
        public void clear(){  
            for(int i = this.getRowCount()-1;i>=0;i--){  
                this.removeRow(i);  
            }  
        }  
          
        public void setTableEditable(boolean editable){  
            tableEditable = editable;  
        }  
          
        @Override  
        public boolean isCellEditable(int row, int col){  
            return tableEditable;  
        }  
          
    }