Moin Moin!
Ich möchte in einem JInternalFrame ein Formular mit zwei Tabellen anzeigen. Wenn ich keine Tabelle zum ContentPane des JInternalFrame hinzufüge, dann wird der Rest des Formulars wunderbar angezeigt. Doch wenn die Tabellen mit drin sind, dann wird mit das Layout total zerschossen und nichts geht mehr (siehe Bild).
Dies ist meine Klasse:
Die Konsolenausgabe schaut so aus:
Hat jemand eine Idee woran es liegt?
Ich möchte in einem JInternalFrame ein Formular mit zwei Tabellen anzeigen. Wenn ich keine Tabelle zum ContentPane des JInternalFrame hinzufüge, dann wird der Rest des Formulars wunderbar angezeigt. Doch wenn die Tabellen mit drin sind, dann wird mit das Layout total zerschossen und nichts geht mehr (siehe Bild).
Dies ist meine Klasse:
Java:
public class ExamPanel extends JInternalFrame implements ActionListener, MouseListener {
private JTextField field;
private JComboBox combo;
private JButton button;
private QuestionListModel tableModel1 = null;
private JTable table1 = null;
private Exam tableModel2 = null;
private JTable table2 = null;
public ExamPanel() {
// JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable)
super("Klausur", false, true, false, true);
this.tableModel1 = QuestionListModel.getInstance();
this.tableModel2 = new Exam();
this.initComponents();
System.out.println("PrefSize(ExamPanel) = " + this.getPreferredSize().toString());
this.setSize( this.getPreferredSize() );
this.setVisible( true );
}
public void initComponents() {
// #################################
// Erstellung der Formular-Komponenten
// #################################
JLabel label1 = new JLabel("Beschreibung:");
field = new JTextField();
JLabel label2 = new JLabel("Fach:");
Subjects modelSubjects = Subjects.getInstance();
ArrayList<String> listSubjects = modelSubjects.getSubjects();
listSubjects.add(0, "");
combo = new JComboBox( listSubjects.toArray() );
button = new JButton("erstellen");
button.addActionListener(this);
// #################################
// Erstellung der Tabellen
// #################################
QuestionCellRenderer qcr = new QuestionCellRenderer();
DefaultTableColumnModel columnModel1 = new DefaultTableColumnModel();
TableColumn column1;
column1 = new TableColumn(0, 500);
column1.setHeaderValue("Fragen in der Datenbank");
column1.setCellRenderer(qcr);
columnModel1.addColumn(column1);
int tableWidth = columnModel1.getTotalColumnWidth();
table1 = new JTable(tableModel1, columnModel1);
table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table1.addMouseListener(this);
tableModel1.addTableModelListener(table1);
DefaultTableColumnModel columnModel2 = new DefaultTableColumnModel();
TableColumn column2;
column2 = new TableColumn(0, 500);
column2.setHeaderValue("Fragen der Klausur");
column2.setCellRenderer(qcr);
columnModel2.addColumn(column2);
table2 = new JTable(tableModel2, columnModel2);
table2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table2.addMouseListener(this);
tableModel2.addTableModelListener(table2);
// #################################
// Zusammenbau des ContentPane
// #################################
GridBagConstraints gbc = new GridBagConstraints(
0, // gridx
0, // gridy
1, // gridwidth
1, // gridheight
1, // weightx
1, // weighty
GridBagConstraints.CENTER, // anchor
GridBagConstraints.NONE, // fill
new Insets(2,2,2,2), // insets
0, // ipadx
0 // ipady
);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
JPanel tablePanel = new JPanel();
tablePanel.setLayout(new GridBagLayout());
Dimension d = new Dimension(200, 24);
field.setPreferredSize(d);
combo.setPreferredSize(d);
button.setPreferredSize(d);
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(label1, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(field, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(label2, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(combo, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
panel.add(button, gbc);
table1.setPreferredScrollableViewportSize(new Dimension(tableWidth, 600));
gbc.gridx = 0;
gbc.gridy = 0;
tablePanel.add(new JScrollPane(table1), gbc);
table2.setPreferredScrollableViewportSize(new Dimension(tableWidth, 600));
gbc.gridx = 1;
gbc.gridy = 0;
tablePanel.add(new JScrollPane(table2), gbc);
System.out.println("PrefSize(tablePanel) = " + tablePanel.getPreferredSize().toString());
gbc.gridx = 0;
gbc.gridy = 3;
gbc.weightx = 2;
panel.add(tablePanel);
this.setContentPane(panel);
}
}
Die Konsolenausgabe schaut so aus:
Code:
PrefSize(tablePanel) = java.awt.Dimension[width=1014,height=607]
PrefSize(ExamPanel) = java.awt.Dimension[width=1314,height=696]
Hat jemand eine Idee woran es liegt?