Ich habe eine Klasse erstellt, die mir helfen soll, ein Fenster mit Tabs besser verwalten zu können.
Hier der Code:
GUI_fenster.java:
Das ganze habe ich in der main()-Methode getestet, funktioniert auch soweit - bis die Methode setCenterPanel() aufgerufen wird, dann wird der entsprechende Tab nicht mehr angezeigt.
PS: Bitte nicht rummeckern, der Code sei krank - das weiß ich selber . Eher Vorschläge bringen, wie ich ihn aufbessern kann!
Hier der Code:
GUI_fenster.java:
Code:
package testPackage;
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
public class GUI_fenster {
private ArrayList<GUI_tabs> tabListe = new ArrayList<GUI_tabs>();
private int fensterHoehe = 700;
private int fensterBreite = 800;
private static final int fensterHoeheStandard = 700;
private static final int fensterBreiteStandard = 800;
private JFrame fenster;
private GUI_JTabbedPaneWithCloseIcons tabs = new GUI_JTabbedPaneWithCloseIcons();
public GUI_fenster() {
fenster = new JFrame();
fenster.setSize(fensterBreiteStandard, fensterHoeheStandard);
fenster.setLocationRelativeTo(null);
fenster.add(tabs);
}
public void addTab(int arrayNr, String titel) {
tabListe.add(arrayNr, new GUI_tabs(titel));
}
public void addTab(int arrayNr, String titel, JPanel panel) {
tabListe.add(arrayNr, new GUI_tabs(titel, panel));
}
public GUI_tabs getTab(int arrayNr) {
return tabListe.get(arrayNr);
}
public GUI_fenster(String titel) {
this();
setTitel(titel);
}
public GUI_fenster(String titel, boolean sichtbar) {
this();
setTitel(titel);
setSichtbar(sichtbar);
}
public void setTitel(String titel) {
fenster.setTitle("Programmname - " + titel);
}
public void setSichtbar(boolean sichtbar) {
fenster.setVisible(sichtbar);
}
public void setFensterHoehe(int hoehe) {
if (hoehe != 0) {
fenster.setSize(fensterBreite, hoehe);
} else {
fenster.setSize(fensterBreite, fensterHoeheStandard);
}
}
public void setFensterBreite(int breite) {
if (breite != 0) {
fenster.setSize(breite, fensterHoehe);
} else {
fenster.setSize(fensterBreiteStandard, fensterHoehe);
}
}
public void schliessenBeimSchliessen() {
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class GUI_tabs {
private JPanel gesamtPanel = new JPanel();
private JPanel northPanel = new JPanel();
private JPanel eastPanel = new JPanel();
private Box southBox;
private JPanel westPanel = new JPanel();
private JPanel centerPanel = new JPanel();
private JLabel ueberschriftLabel = new JLabel();
private GUI_tabs() {
}
public GUI_tabs(String titel, JPanel panel) {
tabs.add(titel, panel);
}
public GUI_tabs(String titel) {
tabs.add(titel, new JPanel());
}
public void setEastPanel(JPanel panel) {
JPanel panel2 = new JPanel();
panel2.setLayout(new GridBagLayout());
panel2.add(panel);
eastPanel = new JPanel();
eastPanel.setLayout(new BorderLayout());
eastPanel.add(BorderLayout.EAST, panel);
gesamtPanel.add(panel);
gesamtPanel.validate();
}
public void setCenterPanel(JPanel panel) {
JPanel panel2 = new JPanel();
panel2.setLayout(new GridBagLayout());
panel2.add(panel);
centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
centerPanel.add(panel2);
gesamtPanel.add(BorderLayout.CENTER, panel);
gesamtPanel.validate();
}
public void setUeberschrift(String ueberschrift) {
northPanel = new JPanel();
ueberschriftLabel = new JLabel(ueberschrift);
Font fontUeberschrift = new Font("Comic Sans MS", Font.BOLD, 30);
ueberschriftLabel.setFont(fontUeberschrift);
northPanel.add(ueberschriftLabel);
fenster.add(BorderLayout.NORTH, northPanel);
}
}
public static void main(String[] args) {
GUI_fenster fenster = new GUI_fenster();
fenster.schliessenBeimSchliessen();
fenster.setSichtbar(true);
JPanel panel = new JPanel();
fenster.addTab(0, "Test", panel);
fenster.getTab(0).setCenterPanel(panel); // Bug, bei Verwendung
// dieser Funktion wird der
// Tab nicht angezeigt
fenster.addTab(1, "Test2");
JPanel x = new JPanel();
x.add(new JButton("hi"));
fenster.getTab(1).setCenterPanel(x);
}
}
Das ganze habe ich in der main()-Methode getestet, funktioniert auch soweit - bis die Methode setCenterPanel() aufgerufen wird, dann wird der entsprechende Tab nicht mehr angezeigt.
PS: Bitte nicht rummeckern, der Code sei krank - das weiß ich selber . Eher Vorschläge bringen, wie ich ihn aufbessern kann!