What about this:
ArrayList<JTable> tables = new ArrayList<JTable>();
for (int i = 0; i < 18; i++) {
tables.add(new JTable());
}
private JComponent createGUI() {
JPanel pnl = new JPanel();
for (JTable jTable : tables) {
pnl.add(jTable);
}
return pnl;
}
Update Example:
public class Display extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Display().setVisible(true);
}
});
}
private ArrayList<JTable> tables = new ArrayList<JTable>(){{
for (int i = 0; i < 18; i++) {
add(new JTable(new DefaultTableModel(3,3)));
}
}};
public Display() {
super("Title");
this.setSize(832, 594);
this.setLocationRelativeTo(null); // to center frame on screen
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel content = new JPanel();
content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));
for (JTable table : tables) {
content.add( createGUI(table) );
}
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(content, BorderLayout.CENTER);
}
private JPanel createGUI(JTable table) {
JPanel pnl = new JPanel(new BorderLayout());
pnl.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
pnl.add(table.getTableHeader(), BorderLayout.NORTH);
pnl.add(table, BorderLayout.CENTER);
return pnl;
}
}