Interface Unterschied: setContentPane() & getContentPane().add

specialize

Bekanntes Mitglied
Hallo,

was ist denn der Unterschied zwischen diesen 2 Methoden?

Der Grund für die Frage ist, dass bei einem Frame von mir ein JPanel nur hinzugefügt wird, wenn ich die setContentPane() Methode aufrufe, während ich früher mit getContentPane().add gearbeitet habe (allerdings da noch mit fixen Bounds und keinen JPanels).
 
ist da wirklich nicht mit Denken hinzukommen? haben nicht beide Methoden eine klare Funktion?

der Unterschied ist etwa derselbe wie zwischen
'neuen Ikea-Läufer als Fussbodenunterlage im Wohnzimmer verwenden (alte entfernen)'
und 'neuen Ikea-Läufer auf vorhandenen Teppich im Wohnzimmer legen'
 
und was könnte das problem sein, wenn er ein jpanel nur bei setContentPane() und nicht bei add() hinzufügt?

welches ist die sauberere lösung?
 
ist ersten Post klingt es eher, als wäre das add() das Problem?
abhängig von weiteren add() und Layout-Manager kann da natürlich alles mögliche schiefgehen,
genau wie ein IKEA-Läufer im Wohnzimmer nicht passt wenn schon 493 Billy-Regale drinstehen (nicht zusammengebaut)

bei setContentPane() kann es je nach Restprogramm genauso gut oder schlecht enden, immer muss alles zusammenpassen,

Präferenzen zwischen den beiden gibt es daher kaum
 
Haha danke für die einmaligen IKEA Beispiele :applaus:

Java:
                pCmd = new JPanel(new BorderLayout());
		pCmd.add(textAreaCmd,BorderLayout.CENTER);
		
	
		
		
		fCmd.getContentPane().add(pCmd);
		fCmd.pack();
		
		Dimension frameSizeCMD = new Dimension(600, 140);
		Dimension screenSizeCMD = Toolkit.getDefaultToolkit().getScreenSize();
		double top9d = (screenSizeCMD.height - frameSizeCMD.height) *0.95;
		double left9d = (screenSizeCMD.width - frameSizeCMD.width) *0.05;
		int top9 = (int)top9d;
		int left9 = (int)left9d;
		fCmd.setLocation(left9, top9);
		fCmd.setSize(frameSizeCMD);
		fCmd.setResizable(false);
		fCmd.setTitle("Testrun Status");

Ersetze ich getContentPane() mit setContentPane() funktionierts.

Der Frame wird über einen Button visible gesetzt.
Ich denke in dem Javacode oben kann man den Fehler nicht finden oder?
Davor habe ich nur andere Frames zusammengesetzt, diesen frame aber nicht angerührt.

€: FEHLER GEFUNDEN.
danke. Hab noch in der alten Version das Layout null gesetzt. 😱
 
Zuletzt bearbeitet:
beide Varianten machen exakt dasselbe, zumindest im von mir ergänzten vollständigen Tesprogramm,

ein Programm besteht immer aus 1000 Zeilen, nur 999 zu posten bringt nichts, der Fehler kann in der letzten sein,
allerdings besser auch nicht 1000 langweilige Zeilen posten, sondern nach Möglichkeit das Programm soweit kürzen dass das Fehler immer noch auftritt

Java:
public class Test {
    public static void main(String[] args)   {
        JFrame fCmd = new JFrame();
        fCmd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pCmd;
        JTextArea textAreaCmd = new JTextArea("Hallo");

        pCmd = new JPanel(new BorderLayout());
        pCmd.add(textAreaCmd, BorderLayout.CENTER);


        // fCmd.getContentPane().add(pCmd);
        fCmd.setContentPane(pCmd);
        fCmd.pack();

        Dimension frameSizeCMD = new Dimension(600, 140);
        Dimension screenSizeCMD = Toolkit.getDefaultToolkit().getScreenSize();
        double top9d = (screenSizeCMD.height - frameSizeCMD.height) * 0.95;
        double left9d = (screenSizeCMD.width - frameSizeCMD.width) * 0.05;
        int top9 = (int)top9d;
        int left9 = (int)left9d;
        fCmd.setLocation(left9, top9);
        fCmd.setSize(frameSizeCMD);
        fCmd.setResizable(false);
        fCmd.setTitle("Testrun Status");

        fCmd.setVisible(true);
    }
}

edit: umso besser
 

Neue Themen


Zurück
Oben