IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

position des composants


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 82
    Par défaut position des composants
    Bonjour, encore une tite question.
    En général, lorsqu'on veut placer des composants dans son parent, on utilise un layout. Mais pour le coup, je vois pas trop comment faire.
    Imaginez un jeu de dame par exemple:
    Un composant représente le damier
    D'autres composants représentent les pions.

    Je ne pense pas qu'un gridbaglayout permette de représenter la disposition initiale des pions dans le damier, puisque par définition, avec un gridbaglayout, la somme des poids des composants selon X et Y représente tout l'espace disponible, et donc, les composants vont remplir tout l'espace disponible.
    J'espère que je suis clair.
    Donc, dans cet exemple du jeu de dame, même si l'on utilise un gridbaglayout de 10x10 et que l'on ne remplit que les lignes 1,2,3 et 8,9,10, ces 6 lignes vont prendre l'ensemble de la place disponible (autrement dit les lignes 4 à 7 auront une hauteur de 0).

    Savez vous comment régler ce problème?
    (la seule solution que je vois pour le moment c'est de remplir ces cases vides avec des composants qui ne s'affichent pas, donc des composants dont on implémente pas paint(), mais je crains que ce soit un peu lourd ).

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour ce genre de jeux(et tous en général) mieux vaut tout directement dessiner à la main...

    Tu étends un JPanel, tu surcharge la méthode paintComponent et tu dessine dans le code de cette méthode (à soivoir que c'est comme celà que sont réalisé les composants Swing, aveuc deux ou trois niveaux de complexion supplémentaire bien sûr).

    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 82
    Par défaut re
    Ah, ok, j'aurais vraiment pas cru, parceque j'avais essayé comme ca à une époque et j'avais trouvé ca super galère.
    En particulier lorsque tu veux déplacer tes pièces avec un MouseMotion.
    En fait j'avais atteint de bons résultats, mais j'avais le problème suivant (de mémoire) du au fait que paint est threadée je pense:
    Pour éviter un scintillement lorsque la scène est repeinte avec des intervalles très courts (petites barres horyzontales qui apparaissent), j'avais tenté de repeindre uniquement ce qui était nécessaire. Donc en déplacant la pièce, je disais, affiche l'arrière plan à l'ancienne position du curseur, affiche la pièce à la position actuelle du curseur. Mais en déplacant les pièces rapidement, rien a faire, j'avais toujours une trace de ma pièce qui aparaissait.

    Bon, c'est peut être pas très clair ce que je dis. De toute façon je vais réessayer, si j'ai toujours ce problème je vous tient au courant.

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Moi j'aurais procédé de façon différente.

    J'aurais utilisé le système de ZOrder, ou un JLayeredPane, avec lesquels j'aurais utilisé deux JPanels superposés. Celui du fond aurait été l'échiquier, celui du dessus celui où se déplace les pièces.

    Pour celui de l'échiquier, le GridLayout me semble bien indiqué ; il n'y a pas tant de cases que cela, et cela facilite la vie pour les repérages. Nous aurions parlé d'un jeu de Go, avec ses 19x19 intersections, que cela aurait été peut être plus tendu.

    Pour celui des pièces, un layout null me semble justifié, et j'aurais positionné les pièces en me repérant simplement sur la position des cases.

    Mes 2 centimes.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 82
    Par défaut re
    Merci pour ta réponse.

    Juste histoire de discuter un peu:
    Quel intéret d'utiliser un layout pour les cases? En l'occurence l'échiquier est plutot simple a dessiner et à redimensionner, et peut donc être un objet à part entière, non?
    En fait, moi, si je voulais utiliser un gridBagLayout, c'était uniquement pour les pièces, et c'était dans l'idée de faire du dragg d'un composant pièce lors du mouvement d'une pièce. Histoire d'éviter de tout implémenter avec paintComponent.
    Par contre, j'aime bien l'idée des deux JPanel (je me pose quand même une question quand aux déplacement des pièces: quand le background est transparent, et que tu repains un rond à deux endroits différents, seul le dernier apparait? si oui c'est clair que c'est parfait, sinon c'est pas très utile je pense).
    Je vais faire quelques tests pour voir.

    Finalement, pour le moment, je fais tout avec le paintComponent
    Mais j'ai remarqué quelque chose d'un peu bizarre, c'est que ca marche parfaitement...
    Même si je repaint tout à chaque instant du déplacement d'une pièce:
    1) L'échiquier
    2) Les pièces
    3) La pièce en déplacement
    Je n'ai plus le problème que j'avais il y a de ca 2 ans, à savoir un petit scintillement de l'échiquier qui était repaint trop souvent.
    Pourtant j'utilisais déjà le double buffering à cette époque.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 82
    Par défaut
    Bon, j'ai fait le test.
    Si on trace 2 ronds sur un JPanel dont on n'a pas défini le background, la trace des pièces reste visible, donc je vois pas trop comment faire pour utiliser 2 JPanel. Il faudrait pouvoir dire, repeinds moi un fond transparent avant de me repeindre les pièces. Je pense voir comment faire, mais bon, je pense que ca devient plus gourmand en ressources que de tout implémenter avec un simple paint.

    (Je me doute que c'est pas très clair ce que je raconte, mais pour ceux qui arrivent à comprendre, votre avis svp?)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/09/2012, 17h09
  2. Position des composants
    Par Panaméen dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/06/2009, 11h58
  3. gerer la position des composants dans une fenetre
    Par AbouraStat dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/05/2009, 11h37
  4. Position des composants sur une frame avec layout null
    Par bellemlih dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/12/2007, 22h13
  5. Position des composants avec Visual Editor
    Par Houssem dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/04/2007, 03h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo