10
votes

Comment ajouter plusieurs composants à un jframe?

J'ai un jframe .

J'ai aussi une catégorie la catégorie qui s'étend composant . Cette classe de case a une méthode peinture qui fait un rectangle rempli.

Lorsque j'ajoute plusieurs composants de la boîte à mon jframe, seul le plus récemment ajouté est affiché lorsque j'appelle repeindre sur le jframe.

J'ai regardé les responsables de la mise en page, mais je ne suis pas sûr que c'est ce que je veux. Tout ce que je veux, c'est pouvoir faire une animation de tas de rectangles entiers partout où je veux à l'écran.

(J'ai également essayé de créer un panneau en ajoutant le panneau au jframe, puis en ajoutant tous les composants de la boîte au panneau. Cela n'a pas fonctionné non plus).

Merci d'avance!


2 commentaires

Le code serait utile. On dirait que vous écrasez une référence ou une smth ...


Fera à l'avenir. Merci.


5 Réponses :


0
votes

Vous devez découvrir d'autres gestionnaires de layout. JFRAME Par défaut utilise BorderLayout et sans spécifier le "Place", un composant est ajouté, ils sont ajoutés au centre. En fonction de ce que vous voulez que votre UI ressemble dépend du gestionnaire de mise en page à utiliser. Je suggérerais peut-être utiliser NetBeans Gui Builder.

Edit: a raté la partie sur ce que vous voulez ajouter, mais le concept est toujours identique, si vous allez simplement ajouter ces composants au gestionnaire de mise en page par défaut, ils seront écrasés. On dirait que vous devrez peut-être faire votre peinture à l'intérieur de l'un de vos composants de la boîte ou créer un JPanel et définir la mise en page sur null mais vous devriez ensuite les placer explicitement. Dépend vraiment de ce que vous voulez faire avec cela exactement.


1 commentaires

Il essaie de dessiner des composants de l'heure d'exécution, je ne vois pas comment le constructeur de l'interface graphique Netbeans pourrait y être d'une aide.



13
votes

Vous avez 2 choix.

Vous pouvez modifier la mise en page de votre cadre: xxx

maintenant, si vous ajoutez plus d'une boîte, il apparaîtra sur Le cadre.

L'autre option est de faire ce que vous avez dit que vous avez essayé. (Ajout d'un panneau au cadre) xxx

aussi, vous devez faire attention au dimensionnement de votre . Vous voudrez probablement un appel à SetPreFerredSize () quelque part dans la création de la case . Cela indiquera à Java quelle taille de faire la boîte lorsqu'il est ajouté à la mise en page.

Vous devez également jeter un coup d'oeil sur le Tutoriels de gestion de layout Java . Il y a beaucoup d'excellentes informations là-bas.

et, une dernière chose. La seule seule boîte à une époque était affichée sur le cadre était que le gestionnaire de layout de Jframe est BorderLayout . Et, lorsque vous appelez ajoutez sur un composant qui possède une bordureLayout, le composant est automatiquement ajouté au centre du composant. Les appels ultérieurs vers Ajouter écraseront le composant central, laissant un seul composant au milieu.


8 commentaires

Y a-t-il une mise en page qui me permet de simplement ajouter autant de composants que je veux, sans avoir à choisir explicitement où (par exemple, gauche, droite ou centre)?


L'autre option que j'ai consiste à ajouter 1 composant et à avoir la méthode de la peinture dans ce composant attirer tous les rectangles que je veux. (plutôt que d'avoir chaque rectangle représenté avec son propre composant)


@zucch, le flowlayout vous permettra d'ajouter autant de composants que vous le souhaitez.


@ZUCCH, oui, il est possible de remplacer la méthode peinture () et dessinez les rectangles vous-même.


@ZUCCH, comment voulez-vous les rectangles présentées sur le volet?


Tout ce que j'essaie d'obtenir, c'est d'obtenir de nombreux rectangles (disons 25) se déplaçant dans le cadre pour représenter (particules de gaz flottant dans un récipient). Je vais avoir une boucle et chaque itération Je mettrai à jour la position de tous les rectangles, puis repeindre le cadre.


Je ne me soucie pas vraiment d'une mise en page (et je ne veux pas y faire face), je voudrais dessiner un tas de rectangles en fonction d'une coordonnée X, Y.


@zucch. Si tel est le cas, vous voudrez utiliser un panneau, puis personnalisé les dessiner vous-même ou la mise en page des composants sans gestionnaire de mise en page - Stackoverflow.com/questions/2820872/...



0
votes

Faites votre présentation sur papier en premier, puis lisez sur les gestionnaires de layout de swing.

Sachez que certains composants de l'oscillation n'autorisent qu'un composant à y être ajouté. J'ai traversé cela lors de l'utilisation de vitres à onglets. Chaque onglet ne peut accepter qu'un seul contrôle (JPane?) Vous devez donc créer un panneau séparé avec une mise en page pour organiser les commandes correspondantes, puis une unité ajoutez le volet à l'onglet. Il existe des arrangements similaires dans la bibliothèque SWING.


0 commentaires

0
votes

Vous pouvez définir la disposition de cadre sur null , puis utiliser setbounds () pour positionner vos boîtes exactement où vous voulez.


0 commentaires

0
votes

Merci pour toutes vos réponses.

Étant donné que j'utilise ma propre classe personnalisée, boîte , j'ai la capacité de régler la position de mon rectangle via la méthode de la peinture.

J'ai réalisé que ma classe étendait la mauvaise chose. Il aurait dû prolonger Javax.swing.jcomponent.

Si j'utilise maintenant un panneau avec une superpositionLayout, ajoutez mes composants à ce panneau, ils apparaissent tous correctement.


1 commentaires

Surveillez les conflits avec javax.swing.box .