daboss
Kaiser
Heyho,
ich wollte in Java eine kleine GUI erstellen. Darin soll sich auch ein JTabbedPane befinden. Die einzelnen Reiter/Tabs sind JScrollPanes, weil ich vorher nicht weiss, wie viel Inhalt da rein kommt. In das JScrollPane kommt dann das JPanel mit dem eigentlichen Inhalt. Enthält das JPanel jetzt mehr Inhalt, wie dargestellt werden kann, dann kann ich scrollen. Aber wenn ich Checkboxen und TextAreas hinzufüge, werden die von unten nach oben über das komplette Fenster gezogen, nicht nur über den Reiter. (Siehe Screenshot) JLabels und JTextFields verschwieden, wie ich's erwarte. Kann bitte jemand nen Tipp geben, was ich falsch mache, und wie's funktioniert? Danke schonmal.
Auszüge aus dem Code geb ich noch mit dazu. Hier erstelle ich das JTabbedPane und füge es später zum JFrame hinzu. (Das JFrame hat ein BorderLayout, das Pane kommt in die Mitte.) Ich hoffe, das ist einigermassen vollständig, ich hab's auf's wesentliche zusammenkürzen wollen:
Hier noch die Funktion getGridBagConstraints:
ich wollte in Java eine kleine GUI erstellen. Darin soll sich auch ein JTabbedPane befinden. Die einzelnen Reiter/Tabs sind JScrollPanes, weil ich vorher nicht weiss, wie viel Inhalt da rein kommt. In das JScrollPane kommt dann das JPanel mit dem eigentlichen Inhalt. Enthält das JPanel jetzt mehr Inhalt, wie dargestellt werden kann, dann kann ich scrollen. Aber wenn ich Checkboxen und TextAreas hinzufüge, werden die von unten nach oben über das komplette Fenster gezogen, nicht nur über den Reiter. (Siehe Screenshot) JLabels und JTextFields verschwieden, wie ich's erwarte. Kann bitte jemand nen Tipp geben, was ich falsch mache, und wie's funktioniert? Danke schonmal.
Auszüge aus dem Code geb ich noch mit dazu. Hier erstelle ich das JTabbedPane und füge es später zum JFrame hinzu. (Das JFrame hat ein BorderLayout, das Pane kommt in die Mitte.) Ich hoffe, das ist einigermassen vollständig, ich hab's auf's wesentliche zusammenkürzen wollen:
Code:
JTabbedPane jtpQuestions;
JPanel jpTab;
JPanel jpTabContent;
JScrollPane jspTabContent;
GridLayout jpLayout = new GridLayout(1, 1);
jpLayout.setVgap(0);
jpLayout.setHgap(0);
jpTab.setLayout(jpLayout);
GridBagLayout gbl = new GridBagLayout();
for(/* lies, was ins Panel soll */){
jpTab = new JPanel();
jpTabContent = new JPanel();
jspTabContent = new JScrollPane();
jpLayout = new GridLayout(1, 1);
jpLayout.setVgap(10);
jpLayout.setHgap(10);
jpTab.setLayout(jpLayout);
jpTabContent.setLayout(gbl);
if(/* Textarea soll rein */){
JLabel jl = new JLabel(f.getINr() + ". " + f.getSInhalt());
jl.setName(String.valueOf(f.getINr()));
jl.setHorizontalAlignment(SwingConstants.RIGHT);
gbl.setConstraints(jl, this.getGridBagConstraints(0, y++, 1, 1, 0, 0));
jpTabContent.add(jl);
TextArea ta = new TextArea();
gbl.setConstraints(ta, this.getGridBagConstraints(1,
y++, 2, 1, 1.0, 0));
jpTabContent.add(ta);
} else if(/* Checkbox soll rein */){
Checkbox chk = new Checkbox();
chk.setLabel(c.getSInhalt());
chk.setName(String.valueOf(c.getINr()));
gbl.setConstraints(chk, this.getGridBagConstraints(
1, y++, 2, 1, 1.0, 0));
jpTabContent.add(chk);
} //...
jspTabContent.setViewportView(jpTabContent);
jpTab.add(jspTabContent);
jtpQuestions.addTab(sBereich, jpTab);
}
vatc.setJtpQuestions(jtpQuestions);
Hier noch die Funktion getGridBagConstraints:
Code:
private GridBagConstraints getGridBagConstraints(int x, int y, int width,
int height, double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
return gbc;
}
Anhänge
Zuletzt bearbeitet: