Java Swing JFrame Mise En Page
Je viens d'écrire un code simple où je veux un champ de texte et un bouton apparaîtra sur la trame principale, mais après l'exécution de tout ce que je vois est le textfield.
Si j'écris le code du bouton après le textfield alors seulement le bouton est affiché.
Aucune idée pourquoi?
JFrame mainframe=new JFrame();
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setBounds(0,0,200,200);
JButton jb=new JButton();
jb.setText("Leech");
mainframe.add(jb);
JTextField link=new JTextField(50);
mainframe.add(link);
mainframe.pack();
mainframe.setVisible(true);
La javadoc de la classe indique clairement que vous pouvez appeler à ajouter, ce qui permettra de l'ajouter à la fenêtre de contenu. Au moins dans les versions plus récentes de Java, alors que le 1.3 documentation à laquelle vous vous référez
OriginalL'auteur DanMatlin | 2011-12-28
Vous devez vous connecter pour publier un commentaire.
Ajouter des composants à un Composite puis ajouter que le panneau de la ContentPane de JFrame.
FlowLayout
commeLayoutManager
sur leJFrame
, puisque c'est la mise en page par défaut du formulaire de laJPanel
Ne peux pas croire que c'est la réponse. Robin réponse ci-dessous est la réponse correcte. Juste pour comprendre ce que la mise en page par défaut du gestionnaire d'une JFrame est et la position par défaut de quelque chose est ajouté dans un BorderLayout si on n'est pas spécifié.
quel est l'intérêt de ton commentaire? Pensez-vous que cette réponse est fausse ou que vous n'aimez pas comment il est codé de cette façon?
l'OP de la question était "une idée de pourquoi?", vous n'avez pas à expliquer pourquoi son code ne fonctionnait pas, Robin de la réponse explique pourquoi
chaque fois que je demande "pourquoi quelque chose ne fonctionne pas", je veux dire "quelqu'un peut-il le faire fonctionner pour moi". Mais c'est la façon dont je pense et je suppose que c'est ce qu'il veulent, "faire à la fois le bouton et textfield afficher dans la fenêtre". Il l'a acceptée comme une réponse parce qu'il a trouvé ce qu'il cherchait. Pour les autres personnes qui veulent vraiment savoir pourquoi avoir jusqu'voté Robin réponse et vous pouvez le voir, il a obtenu plus de votes, donc vous pouvez lire la réponse avec le plus de vote, qui est ce que je fais sur stackoverflow.
OriginalL'auteur Ibrahim
La mise en page par défaut sur un
JFrame
est unBorderLayout
. L'appel de laadd
méthode sur unContainer
avec une telle disposition est équivalent à un appeladd(..., BorderLayout.CENTER)
. Chaque emplacement de laBorderLayout
peut contenir qu'un seul élément. Ce qui fait deux appelsrésultats dans un CENTRE contenant le dernier élément que vous avez ajouté. Si vous voulez éviter cela, vous pouvez l'ajouter à des endroits différents, ou d'utiliser un autre gestionnaire de présentation (par exemple un
FlowLayout
) en appelantJFrame#setLayout
OriginalL'auteur Robin
Au lieu d'ajouter directement les Composants de la JFrame, l'utilisation d'un Composite en tant que conteneur avec les LayoutManager.
Ici vous pouvez trouver plusieurs tutoriels sur la disposition des gestionnaires.
Essentiellement dans les Swing le LayoutManager est responsable de préparer les enfants Composants (mise en place de leur position et de leur taille), de sorte que chaque composant conteneur que vous utilisez à l'intérieur de votre application, doit être configuré avec les approprions LayoutManager.
OriginalL'auteur Heisenbug
JFrame modèle par défaut du Gestionnaire BorderLayout. Si vous souhaitez que la mise en page automatique, vous pouvez utiliser le FlowLayout:
Si vous souhaitez spécifier des coordonnées par setBounds() la méthode, vous devez annuler le réglage de l'layout manager sur JFrame:
OriginalL'auteur guest
si vous voyez BorderLayout Documentation
mainframe.ajouter(jb);) est égal à l'unité principale.ajouter(jb,BorderLayout.CENTRE);
mainframe.ajouter(lien), est égale à l'unité principale.ajouter(jb,BorderLayout.CENTRE);
donc il se contente d'afficher le dernier
OriginalL'auteur John Dadi Leop