Quand utiliser
Container c = getContentpane();
& quand utiliser
frame.getcontentpane();
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
}
}
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.
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"));
}
}
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.
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();
}
}
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.
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();
}
}
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();
}
}