JFrame() und getContentPane()

Status
Nicht offen für weitere Antworten.

HannsW

Bekanntes Mitglied
😳Bitte nicht schlagen, aber irgendwie habe ich ein Problem:

hat der Frame bereits ein Panel als Contentpane, oder muss ich es erst erzeugen?

Was ist korrrekt?

Var1:
Java:
   .. 
   JFrame aFrame = new JFrame();
   JPanel contentPane = aFrame.getContentPane();
oder
Var2:

Var1:
Java:
.. 
   JFrame aFrame = new JFrame();
   JPanel contentPane = new JPanel;
   aFrame.setContentPane(contentPane);
 
geht beides, das erste ist speicherschonender, warum ein vorhandenes JPanel ersetzen?
der Rückgabewert von getContentPane() ist aber Container, könnte theoretisch was anderes als JPanel sein

zu bedenken ist, dass JPanel standardmäßig ein FlowLayout hat,
während das ContentPane mit BorderLayout initialisiert wird

Java:
    /**
     * Called by the constructor methods to create the default 
     * <code>contentPane</code>. 
     * By default this method creates a new <code>JComponent</code> add sets a 
     * <code>BorderLayout</code> as its <code>LayoutManager</code>.
     * @return the default <code>contentPane</code>
     */
    protected Container createContentPane() {
        JComponent c = new JPanel();
        c.setName(this.getName()+".contentPane");
        c.setLayout(new BorderLayout() {
            /* This BorderLayout subclass maps a null constraint to CENTER.
             * Although the reference BorderLayout also does this, some VMs
             * throw an IllegalArgumentException.
             */
            public void addLayoutComponent(Component comp, Object constraints) {
                if (constraints == null) {
                    constraints = BorderLayout.CENTER;
                }
                super.addLayoutComponent(comp, constraints);
            }
        });
        return c;
    }
 
geht beides, das erste ist speicherschonender, warum ein vorhandenes JPanel ersetzen?
der Rückgabewert von getContentPane() ist aber Container, könnte theoretisch was anderes als JPanel sein
d.h: solange Sun den JFrame nicht ändert, kann ich folgenden Code verwenden?
Java:
 // contentPane ist JPanel !
    contentPanel = (JPanel) this.getContentPane();
oder muss ich vorsorglich ein try..catch verwenden, für den Fall, daß mal kein JPanel zurückkommt?
 
wenn dann wäre ein instanceof-Test angesagt, aber sowas muss man nicht abfangen,
so ein Fehler kann man dann korrigieren wenn er auftritt,

falls du ein sicheres Programm bauen willst, welches dann nicht mehr korrigiert werden kann,
setze doch lieber ein neues JPanel,

oder muss dich überhaupt interessieren ob es ein JPanel ist? jFrame.add() sollte in jedem Fall funktionieren
 
wenn dann wäre ein instanceof-Test angesagt, aber sowas muss man nicht abfangen,
so ein Fehler kann man dann korrigieren wenn er auftritt,
war auch mein Gefühl
falls du ein sicheres Programm bauen willst, welches dann nicht mehr korrigiert werden kann,
setze doch lieber ein neues JPanel,
HAbe ich bis jetzt eigentlich immer gemacht

oder muss dich überhaupt interessieren ob es ein JPanel ist? jFrame.add() sollte in jedem Fall funktionieren
Irgendwie beruhigt es mich doch, zu wissen was ich und womit mache.

Danke für Deine Hilfe:applaus:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben