Servus zusammen,
ich sitze hier gerade an einem Java Programm aber irgendwie will das ganze noch nicht so wie ich will
Es geht darum folgendes Layout umzusetzen:
Der blaue Teil ist mein JFrame, darin soll es zwei verschiedene Bereiche geben:
1. Ein JScrollPane mit einem Panel, das viele kleinere JPanels enthält (bis jetzt 6 Stück). Die Scrollpane ist grün, das "wrapper" Panel ist gelb und die vielen kleineren Panels sind rot.
2. Ein JPanel mit einigen Buttons drin (hellrot).
Der Frame ist am Beginn 800x600 Pixel groß. Das untere JPanel soll immer 50 Pixel hoch sein und alle Elemente sollen immer so breit wie das gesamte Fenster sein! Das JScrollPane soll also wenn das Fenster nach oben oder unten größer wird auch mitwachsen und eventuell "verschwinden", also die Scrollbars ausgeblendet werden.
Die Abstände zwischen den Elementen sollte natürlich 0 sein, auf dem Bild sind die Abstände nur da um zu zeigen wo was liegen soll. Soll ich eventuell den wrapper wieder entfernen?
Ich poste jetzt hier einfach mal mein Code und wie es im Moment aussieht.
Das Ganze wird dann einfach in einem JFrame aufgerufen:
Also es sieht auch schon ein bischen so aus wie ich das haben will, aber wie kann ich zum Beispiel ohne die Dimensions angeben, dass die Panels den gesamten Bildschirm ausfüllen?
Ich habe auch noch Probleme damit wann und wo ich jetzt wirklich pack() validate() und repaint() verwenden muss bzw. sollte.
So sieht das ganze bisher aus:
Danke schonmal für eure Hilfe.
ich sitze hier gerade an einem Java Programm aber irgendwie will das ganze noch nicht so wie ich will
Es geht darum folgendes Layout umzusetzen:
Der blaue Teil ist mein JFrame, darin soll es zwei verschiedene Bereiche geben:
1. Ein JScrollPane mit einem Panel, das viele kleinere JPanels enthält (bis jetzt 6 Stück). Die Scrollpane ist grün, das "wrapper" Panel ist gelb und die vielen kleineren Panels sind rot.
2. Ein JPanel mit einigen Buttons drin (hellrot).
Der Frame ist am Beginn 800x600 Pixel groß. Das untere JPanel soll immer 50 Pixel hoch sein und alle Elemente sollen immer so breit wie das gesamte Fenster sein! Das JScrollPane soll also wenn das Fenster nach oben oder unten größer wird auch mitwachsen und eventuell "verschwinden", also die Scrollbars ausgeblendet werden.
Die Abstände zwischen den Elementen sollte natürlich 0 sein, auf dem Bild sind die Abstände nur da um zu zeigen wo was liegen soll. Soll ich eventuell den wrapper wieder entfernen?
Ich poste jetzt hier einfach mal mein Code und wie es im Moment aussieht.
Code:
public class OverviewPanel {
public static JPanel getOverviewPanel() {
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBackground(Color.GREEN);
scrollPane.setViewportView(getMainPanel());
JPanel wrapper = new JPanel();
wrapper.setLayout(new GridBagLayout());
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
wrapper.add(scrollPane, gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
wrapper.add(getCreateInvitationPanel(), gridBagConstraints);
wrapper.invalidate();
wrapper.validate();
wrapper.repaint();
return wrapper;
}
private static JPanel getMainPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
panel.add(getInformationPanel(), gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
panel.add(getAttendesPanel(), gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
panel.add(getMeetingsPanel(), gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
panel.add(getAspectsPanel(), gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
panel.add(getSeveritiesPanel(), gridBagConstraints);
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 5;
panel.add(getProductPanel(), gridBagConstraints);
panel.invalidate();
panel.validate();
panel.repaint();
return panel;
}
private static JPanel getCreateInvitationPanel() {
JPanel panel = new JPanel();
panel.add(getCreateInvitationButton());
panel.setBackground(Color.pink);
return panel;
}
private static JPanel getInformationPanel() {
//JLabel description = new JLabel(Application.getInstance().getReview().getDescription());
//JLabel descriptionLabel = new JLabel("Beschreibung:");
//JLabel name = new JLabel(Application.getInstance().getReview().getName());
//JLabel nameLabel = new JLabel("Name:");
JLabel title = new JLabel("1");
JPanel panel = new JPanel();
panel.add(title);
//panel.add(nameLabel);
//panel.add(name);
//panel.add(descriptionLabel);
//panel.add(description);
panel.setBackground(Color.RED);
return panel;
}
private static JPanel getAttendesPanel() {
JLabel title = new JLabel("2");
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.add(title);
return panel;
}
private static JPanel getMeetingsPanel() {
JLabel title = new JLabel("3");
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.add(title);
return panel;
}
private static JPanel getAspectsPanel() {
JLabel title = new JLabel("4");
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.add(title);
return panel;
}
private static JPanel getSeveritiesPanel() {
JLabel title = new JLabel("5");
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.add(title);
return panel;
}
private static JPanel getProductPanel() {
JLabel title = new JLabel("6");
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.add(title);
return panel;
}
private static JButton getCreateInvitationButton() {
JButton button = new JButton("Create Invitations");
return button;
}
}
Das Ganze wird dann einfach in einem JFrame aufgerufen:
Code:
getContentPane().add(OverviewPanel.getOverviewPanel());
getContentPane().invalidate();
getContentPane().validate();
getContentPane().repaint();
Also es sieht auch schon ein bischen so aus wie ich das haben will, aber wie kann ich zum Beispiel ohne die Dimensions angeben, dass die Panels den gesamten Bildschirm ausfüllen?
Ich habe auch noch Probleme damit wann und wo ich jetzt wirklich pack() validate() und repaint() verwenden muss bzw. sollte.
So sieht das ganze bisher aus:
Danke schonmal für eure Hilfe.