web-dev-qa-db-fra.com

Que fait exactement getContentPane ()?

Quand utiliser 

Container c = getContentpane();

& quand utiliser 

frame.getcontentpane();
11
Chinmay Kale

Si le code fait partie d'une sous-classe JFrame, vous devez utiliser getContentPane(). Si le code ne fait pas partie du cadre (vous utilisez peut-être la méthode static main() pour l'application), vous devez utiliser un objet JFrame pour appeler getContentPane(); C'est ce que frame.getContentPane() fait.

Exemples:

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);

Cette ligne de code est difficile à comprendre et le tuteur vous permettra de la comprendre pleinement à mesure que vous continuerez à étudier Java . Il convient tout d’abord de prendre en compte la règle qui consiste à modifier un objet avec un méthode. Sur le côté gauche d'un period se trouve un objet, et la méthode qui modifie le object se trouve sur le côté droit du period. Cette règle s'applique ici.

Un conteneur comporte plusieurs couches. Vous pouvez considérer un calque comme un film transparent recouvrant le conteneur. Dans Java Swing, le calque utilisé pour contenir des objets est appelé volet contenu. Les objets sont ajoutés à la couche du volet contenu du conteneur. La méthode getContentPane() récupère le calque du volet contenu afin que vous puissiez y ajouter un objet. Le volet de contenu est un objet créé par l'environnement d'exécution Java. Vous n'avez pas besoin de connaître le nom du volet de contenu pour l'utiliser. Lorsque vous utilisez getContentPane(), l’objet de volet de contenu est alors substitué afin que vous puissiez lui appliquer une méthode. Dans cette ligne de code, nous n’ajoutons pas d’objet au volet de contenu. Au lieu de cela, nous faisons en sorte que la couleur du volet de contenu soit jaune. Cette ligne de code modifie la couleur par défaut, le blanc, en jaune. Vous vous souviendrez peut-être d'avoir vu le rectangle jaune dans l'exemple du programme exécuté dans un navigateur. Cette ligne de code est ce qui a rendu jaune cette zone rectangulaire.

Une façon de penser à cela est de penser que l'objet du volet de contenu se substitue à la méthode getContentPane (), comme ceci:

contentpaneobject.setBackground(Color.YELLOW);

Bien que vous ne voyiez jamais vraiment ce qui précède statement, vous avez les fonctionnalités de statement. Lorsque vous récupérez le volet content avec la méthode getContentPane(), vous pouvez ensuite modifier l'objet de volet content, nommé arbitrairement contentpaneobject dans l'exemple ci-dessus. Dans cette instruction, la modification consiste à modifier la couleur du volet de contenu. Cette étape est présentée ensuite dans le tuteur.

Notez la forme de getContentPane() en tant que méthode. La méthode commence par une lettre minuscule et comporte des parenthèses. Les parenthèses sont vides.

 enter image description here

 enter image description here

9
Jaimin Patel

Eh bien, je pourrais diriger à l’API

Retourne l'objet contentPane pour ce cadre.

Tout cela fait partie du processus d'initialisation de l'interface graphique . Le protocole de Java est vraiment, certes, un passe-partout pour obtenir votre interface graphique:

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"));
  }
}

-La source

Mais essentiellement, nous obtenons le calque de la sous-fenêtre de contenu afin que vous puissiez ensuite y ajouter un objet. Voir ceci pour plus de détails.

1
Coffee

Probablement que vous étendez JFrame ce qui signifie que la classe héritera des méthodes de JFrame. En tant que tel, votre code peut ressembler à ce qui suit:

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();
    }
}

Dans l'exemple ci-dessus, il n'est pas nécessaire d'utiliser frame.getContentPane() car vous héritez des méthodes de JFrame. En d'autres termes, il vous suffit d'écrire getContentPane(). Alternativement, dans la plupart des cas, vous devriez réellement être instanciant un nouveau JFrame en tant que variable d'instance, sauf si vous ajoutez de nouvelles fonctionnalités à la classe JFrame:

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

Si vous étendez JFrame, nous pouvons utiliser la méthode getContentPane() directement dans notre objet BoxLayout . Mais si nous appliquons une règle d’association (cela signifie que nous créons un objet de JFrame dans notre code ie JFrame f=new JFrame()), nous devons créer un objet Container et passer cet objet dans BoxLayout() en tant qu'argument. 

  1. Quand on étend JFrame:

    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. Si nous créons JFrame Object inside code:

    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