wake-up-neo.com

Was macht getContentPane () genau?

Wann verwenden? 

Container c = getContentpane();

und wann verwenden 

frame.getcontentpane();
11
Chinmay Kale

Wenn der Code Teil einer JFrame-Unterklasse ist, sollten Sie getContentPane() verwenden. Wenn der Code nicht Teil des Frames ist (möglicherweise befinden Sie sich in der static main()-Methode für die Anwendung), müssen Sie ein JFrame-Objekt verwenden, um getContentPane() aufzurufen. das macht frame.getContentPane().

Beispiele:

public class TestApp extends JFrame {
    public static void main(String[] args) {
        TestApp frame = new TestApp();
        Container c = frame.getContentPane();
        // do something with c
        frame.pack();
        frame.show();
    }

    /* constructor */
    public TestApp() {
        Container c = getContentPane(); // same as this.getContentPane()
        // initialize contents of frame
    }
}
10
Ted Hopp
getContentPane().setBackground(Color.YELLOW);

Diese Codezeile ist schwer zu verstehen, und der Tutor wird die Grundlage dafür legen, dass Sie ihn vollständig verstehen, wenn Sie Java weiter studieren. Zuerst sollten Sie die Regel zum Ändern eines object mit einem betrachten. Methode. Auf der linken Seite eines period befindet sich ein object, und die -Methode, die das object ändert, befindet sich auf der rechten Seite des period. Diese Regel gilt hier.

Ein container hat mehrere Ebenen. Sie können sich eine Ebene als transparente Folie vorstellen, die den container überlagert. In Java Swing wird der Layer, der zum Halten von Objekten verwendet wird, als Inhaltsbereich bezeichnet. Objekte werden der Inhaltsbereichsebene des Containers hinzugefügt. Die getContentPane()-Methode ruft die Ebene des Inhaltsbereichs ab, sodass Sie ihr ein Objekt hinzufügen können. Der Inhaltsbereich ist ein Objekt, das von der Java-Laufzeitumgebung erstellt wird. Sie müssen den Namen des Inhaltsbereichs nicht kennen, um ihn verwenden zu können. Wenn Sie getContentPane() verwenden, wird das Inhaltsfensterobjekt dort ersetzt, sodass Sie eine Methode darauf anwenden können. In dieser Codezeile fügen wir dem Inhaltsfenster kein Objekt hinzu. Vielmehr machen wir die Farbe des Inhaltsfensters gelb. In dieser Codezeile wird die Standardfarbe Weiß in Gelb geändert. Möglicherweise erinnern Sie sich daran, das gelbe Rechteck in dem Beispiel zu sehen, in dem das Programm in einem Browser ausgeführt wird. Diese Codezeile macht diesen rechteckigen Bereich gelb.

Eine Möglichkeit, darüber nachzudenken, ist die Annahme, dass das getContentPane () - Verfahren durch das Inhaltsfensterobjekt ersetzt wird, wie folgt:

contentpaneobject.setBackground(Color.YELLOW);

Obwohl Sie die obige -Anweisung nie wirklich sehen, haben Sie die Funktionalität der -Anweisung. Wenn Sie das content-Fenster mit der getContentPane()-Methode abrufen, können Sie das content-Fensterobjekt ändern, das im obigen Beispiel willkürlich als contentpaneobject bezeichnet wird. In dieser Anweisung soll die Farbe des Inhaltsbereichs geändert werden. Dieser Schritt wird als Nächstes im Tutor vorgestellt.

Beachten Sie die Form von getContentPane() als method. Die Methode beginnt mit einem Kleinbuchstaben und enthält Klammern. Die Klammern sind leer.

 enter image description here

 enter image description here

9
Jaimin Patel

Nun, ich könnte an die API weiterleiten

Gibt das contentPane-Objekt für diesen Frame zurück.

Dies ist alles Teil des GUI-Initialisierungsprozesses . Javas Protokoll wirklich, zugegebenermaßen eine Boilerplate, um Ihre GUI einzurichten:

public class FlowLayoutExample extends JApplet {

  public void init () {
    getContentPane().setLayout(new FlowLayout ());
    getContentPane().add(new JButton("One"));
    getContentPane().add(new JButton("Two"));
    getContentPane().add(new JButton("Three"));
    getContentPane().add(new JButton("Four"));
    getContentPane().add(new JButton("Five"));
    getContentPane().add(new JButton("Six"));
  }
}

-Quelle

Im Wesentlichen erhalten wir jedoch die Ebene des Inhaltsbereichs, sodass Sie später ein Objekt hinzufügen können. Weitere Informationen finden Sie hier.

1
Coffee

Wahrscheinlich erweitern Sie JFrame was bedeutet, dass die Klasse die Methoden von JFrame erbt. Daher kann Ihr Code in etwa wie folgt aussehen:

public class MyClass extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new MyClass();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public MyClass() {
        ...
        Container c = getContentPane();
    }
}

Im obigen Beispiel müssen Sie frame.getContentPane() nicht verwenden, da Sie die Methoden von JFrame erben. Mit anderen Worten, Sie müssen nur getContentPane() schreiben. Alternativ sollten Sie in den meisten Fällen instantiating einer neuen JFrame als Instanzvariable sein, es sei denn, Sie fügen der JFrame-Klasse tatsächlich neue Funktionen hinzu:

public class MyClass {
    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new MyClass();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public MyClass() {
        ...
        Container c = frame.getContentPane();
    }
}
1
David Yee

Wenn Sie JFrame erweitern, können wir die getContentPane()-Methode direkt in unserem BoxLayout-Objekt verwenden. Wenn wir jedoch eine Assoziationsregel anwenden (bedeutet, dass in unserem Code ein Objekt von JFrame erstellt wird, dh JFrame f=new JFrame()), müssen wir ein Container-Objekt erstellen Übergeben Sie dieses Objekt in BoxLayout() als Argument. 

  1. Wenn wir JFrame erweitern:

    public class BoxLayOutTest extends JFrame {
        public BoxLayOutTest() {
            // TODO Auto-generated constructor stub
            setSize(300, 400);
            setVisible(true);
            getContentPane().setLayout(new  BoxLayout(getContentPane(), BoxLayout.X_AXIS));
            JButton b1 = new JButton("One");
            JButton b2 = new JButton("Two");
            JButton b3 = new JButton("Three");
            JButton b4 = new JButton("Four");
            JButton b5 = new JButton("Five");
    
            add(b1);
            add(b2);
            add(b3);
            add(b4);
            add(b5);
        }
    
        public static void main(String[] args) {
            new BoxLayOutTest();
        }
    }
    
  2. Wenn wir JFrame Object innerhalb des Codes erstellen:

    public class TwoPanelinFrame {
        JFrame f;
    
        public TwoPanelinFrame() {
            f = new JFrame("Panel Test");
            f.setSize(600, 600);
            f.setVisible(true);
            Container c = f.getContentPane();
            f.getContentPane().setLayout(new BoxLayout(c, BoxLayout.X_AXIS));
    
            JButton b2 = new JButton("One");
            JButton b3 = new JButton("One");
            JButton b4 = new JButton("One");
            JButton b5 = new JButton("One");
    
            f.add(b2);
            f.add(b3);
            f.add(b4);
            f.add(b4);
        }
    
        public static void main(String[] args) {
            new TwoPanelinFrame();
        }
    }
    
0