JPanel auf JPanel auf JPanel auf ... etc. nicht sichtbar

Hallo,

ich arbeite an einem komplexen Layout.
Um mein gewünschtes Aussehen zu erreichen füge ich sehr viele JPanels zu sehr vielen anderen JPanels hinzu.
Und bis zum heutigen Tage hatte ich noch keinerlei Probleme damit!
Doch als ich noch ein JPanel hinzugetfügt habe erschienen dessen Componenten nicht mehr auf dem Bildschirm.
Als ich setBackground(Color.green); auf das Panel angewendet habe, war der Background grün!

Ich hoffe jemand kann mir helfen!
Vielleicht gibt es ja eine Möglichkeit, die Anzahl an hinzufügbaren Panels zu erhöhen, oder ähnliches…

Danke

deine Signatur passt ja gut zum Thema und ist leicht als geposteter Code anzunehmen,

aber nur ein paar Sekunden bis die Ernüchterung einzieht, dass nicht viel mehr als Spekulationen dastehen,
wäre es dir möglich, deinen Code oder ein vereinfachtes Test-Beispiel zu posten?
dann hätte alles Hand und Fuss, so nur genauso zu spekulieren

und meine Hauptvermutung ist,
dass du doch irgendwas individuelles falsch machst, weit entfernt von Fragen a la ‘Anzahl an hinzufügbaren Panels’,
z.B. wird mit schlechten Layout kein Content angezeigt,
das Layout oder sonst etwas könnte natürlich auch auf beengten Platz empfindlich reagieren

OK, also ich kann nicht den kompletten Code posten(zu viel) und bin auf die schnelle auch nicht in der Lage gewesen den Fehler zu reproduzieren, aber ich hab Auszüge:
Das hier funktioniert ohne Probleme:

        contPane.add(textFieldVar, BorderLayout.NORTH);
        contPane.add(textAreaVar, BorderLayout.CENTER);

Hier ist das textArea unsichtbar, aber die Fläche wo es sein sollte ist grün…

        contPane.add(textFieldVar, BorderLayout.NORTH);
        JScrollPane jsp = new JScrollPane(textAreaVar);
        jsp.setBackground(Color.green);
      contPane.add(jsp, BorderLayout.CENTER);

*** Edit ***

OK, ich hab diesen Workaround hinzugefügt und damit funktioniert es, aber ich verstehe nicht warum ich ihn brauche:

        addComponentListener(new ComponentAdapter() {
        	@Override public void componentResized(ComponentEvent arg0) {
		        noteTA.setBounds(jsp.getBounds());
        	}
		});

Ein Beispielprogramm, dass in einer Schleife immer einen Label und ein neues Panel einfügt, sollte ja nicht so schwer sein. Damit ließe sich leicht testen, ob es wirklich eine solche Begrenzung gibt, was ich irgendwie bezweifle.

Wenn contPane tatsächlich ist wo nach es klingt tritt das Problem ja schon im root (also JFrame.getContentPane()) auf.

bye
TT

Oben angedachtes Testprogramm zum rumspielen (ja es ist nicht hübsch, aber es testet, was es soll):


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MultiplePanels {

    private static final int NUMBER_OF_PANELS = 15;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                buildUi();
            }
        });
    }

    private static void buildUi() {
        JFrame frame = new JFrame("Viele Panel");
        frame.setLayout(new BorderLayout());

        JPanel parent = null;
        for (int i=0; i<NUMBER_OF_PANELS; ++i) {
            JPanel panel = createPanel(i + 1);
            if (i == 0) {
                frame.add(panel, BorderLayout.CENTER);
            }
            else {
                parent.add(panel, BorderLayout.CENTER);
            }
            parent = panel;
        }

        frame.setPreferredSize(new Dimension(1200, 800));
        frame.setLocation(100, 75);
        frame.pack();
        frame.setVisible(true);
    }

    private static JPanel createPanel(final int count) {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(BorderFactory.createTitledBorder("Panel Nummer " + count));

        panel.add(new JLabel("Label Nummer " + count), BorderLayout.NORTH);

        return panel;
    }

}

So ein Testprogramm hatte ich auch schon ausprobiert, kam aber nichts bei heraus(außer einem Stackoverflow error)…

Ich hab mittlerweile herausgefunden das ich revalidate aufrufen musste um das Problem zu lösen!

Danke für eure Mühen :slight_smile:

Tu dir diese Arbeit nicht an. Google nach FormLayout, MigLayout oder GroupLayout.