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

Composants Java Discussion :

problème de size et de layout


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut problème de size et de layout
    Bonjour à tous,

    je suis désolé de vous embêter avec une question aussi récurrente, mais je bloque complétement alors je cherche de courageux geek pour me filer un coup de pouce.

    J'avais de très mauvais souvenir des JTable, que je trouvais lourde, non intuitive, peu souple et j'en passe...

    J'ai donc décidé de développer mon propre composant super génial.
    Je me retrouve à présent dans le pétrin pour un tout petit problème de taille...

    Bref, j'affiche dans une JFrame test, un JSCrollPane qui contient mon tableau qui est un JPanel organisé en BorderLayout.

    La partie Nord contient une ligneHorizontale qui est un JPanel structuré par un gridLayout(1,nbColonnes) au quel j'ajoute des Cellule (extends JPanel)

    La partie Ouest contient une ligneVerticale qui est un JPanel structuré par un gridLayout(nbLigne,1) au quel j'ajoute des Cellule (extends JPanel)

    La partie Centre : leCentre est un JPanel tructuré par un
    BoxLayout(leCentre, BoxLayout.PageAxis )
    Pour construire leCentre, j'ajoute des ligneHorizontale.

    Une fois que tout est dedans, je me retrouve avec un problème de taille très désagréable. Tout se trouve à la bonne place, mais les tailles sont différentes.

    Alors ce que j'ai fait, c'est que j'ai récupéré les dimensions du tableau, j'en déduit les dimensions des cellules, puis je parcours l'ensemble de mes cellules et je surcharge la méthode getPreferedSize() de mes cellules pour qu'elles soient toutes identiques...

    C'est un échec total...

    J'ai essayé MinimumSize, MaximumSize, Size, revalidate, validate, pack, repaint...Bref je craque...

    Mais pourquoi donc mes cellules ne respectent pas getPreferedSize à l'affichage???

    Merci beaucoup aux courageux développeurs qui m'aideront .

    PS: Je ne met pas mon code car il est vraiment en chantier, et il est assez gros, mais si vous en avez besoin, je me débrouillerais pour extraire les parties intéressantes...

  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
    Au final tu produira quelque chose de plus lourd, moins flexible et amplement plus buggé qu'une JTable. Est-ce vraiment ce que tu cherches à faire?

    De plus ton composant sera parfaitement incapable de supporter un gnad nombre de ligne/colonnes du fait de sa lourdeur, en effet une JTable est composé d'un seul composant au contraire du tien qui potentiellement pourra en contenir des milliers.

    De plus comment vas tu gérér tes headers de ligne/colonne et garder leur taille en adéquation avec leur contenu.

    Bref si les developpeurs de Swing (et de tous les frameworks existants contenant des grilles/tables/listes/arbres) n'ont pas utilisé ce que tu es en train de faire c'est qu'il y a probablement une raison.

    Un layout pour faire un grille c'est vraiment limite, d'autant plus que le BoxLayout n'est pas franchement une bonne idée pour ce genre de choses. Il aurait mieux valu que tu utilises un seul layout de type grille pour l'ensemble de la partie centrale(genre GridLayout, GridBagLayout, FormLayout, MigLayout).
    De plus as tu prévu un modèle comment vas tu gérer la mise à jour des divers éléments, la récupération des valeurs, la gestion du focus &cie?

    Explique plutôt ce que tu cherches à faire pour ton composant tabulaire, on t'expliquera comment le faire relativement aisément avec une JTable.Là tu t'embarques sur une voie vraiment dangereuse et dont tu ne te dépêtras pas probablement ça.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    Tout d'abord, merci de ta réponse.

    Citation Envoyé par sinok Voir le message
    Au final tu produira quelque chose de plus lourd, moins flexible et amplement plus buggé qu'une JTable. Est-ce vraiment ce que tu cherches à faire?
    Le truc c'est qu'une JTable offre plein de possibilité dont je n'ai pas l'utilité et que je ne comprend pas toujours. L'année dernière j'ai passé des heures et des heures à comprendre les JTable et à debugger les miennes. Je sais très bien que je ferais moins bien que les JTable, mais je sais que je comprendrais très bien ce que j'aurais fait et que je n'aurais pas de problème à le debugger.

    Citation Envoyé par sinok Voir le message
    De plus ton composant sera parfaitement incapable de supporter un gnad nombre de ligne/colonnes du fait de sa lourdeur, en effet une JTable est composé d'un seul composant au contraire du tien qui potentiellement pourra en contenir des milliers.
    Ce n'est pas un problème pour moi car mes tableaux sont de petites tailles (10 *10 environ)

    Citation Envoyé par sinok Voir le message
    De plus comment vas tu gérér tes headers de ligne/colonne et garder leur taille en adéquation avec leur contenu.
    C'est le problème dont je parlais en fait...

    Citation Envoyé par sinok Voir le message
    Bref si les developpeurs de Swing (et de tous les frameworks existants contenant des grilles/tables/listes/arbres) n'ont pas utilisé ce que tu es en train de faire c'est qu'il y a probablement une raison.
    Oui, c'est vrai. Il vaudrait peut être mieux utiliser ce qui est déjà fait. D'ailleurs, c'est ce que je fais dans la quasi totalité des cas ne t'inquiète pas. Mais faire son propre composant, c'est également très formateur, non?

    Citation Envoyé par sinok Voir le message
    Un layout pour faire un grille c'est vraiment limite, d'autant plus que le BoxLayout n'est pas franchement une bonne idée pour ce genre de choses. Il aurait mieux valu que tu utilises un seul layout de type grille pour l'ensemble de la partie centrale(genre GridLayout, GridBagLayout, FormLayout, MigLayout).
    je peux en effet utiliser un gridLaoyut ici, je vais essayer, mais ça ne règlera pas mon problème de taille.

    Citation Envoyé par sinok Voir le message
    De plus as tu prévu un modèle comment vas tu gérer la mise à jour des divers éléments, la récupération des valeurs, la gestion du focus &cie?
    J'ai prévu d'utiliser le patern PAC pour mon composant.

    Citation Envoyé par sinok Voir le message
    Explique plutôt ce que tu cherches à faire pour ton composant tabulaire, on t'expliquera comment le faire relativement aisément avec une JTable.Là tu t'embarques sur une voie vraiment dangereuse et dont tu ne te dépêtras pas probablement ça.
    En fait, j'ai déjà mon composant qui marche et qui est super joli. Mais je me suis rendu compte qu'il serait plus facile à manier si je le faisais plus proprement et en pac. Donc en fait, j'ai un code qui me donne ce que je veux (je peux ajouter des lignes composées de composants divers qui seront incorporés différemment selon leur nature bouton, textField formaté ou non, editables ou non et autres...
    Parfois j'ajoute des en têtes à mes lignes et parfois je ne met pas de titre.

    Bref j'arrive à m'en dépatouiller. Cela dit je pense que n'importe qui d'un peu sérieux me dirait que j'ai fait ça n'importe comment.
    Ce qui serait tout à fait vrai.
    C'est pour ça que je voudrais le refaire bien.
    A vrai dire je pense pouvoir résoudre mon problème en utilisant un gridLayout sur tout mon tableau, mais ça me complexifie la tâche au niveau du modele, c'est pour ça que j'ai voulu utiliser différents layout.

    Mais, même si j'ai tort, la question que je pose est en fait une question générale, non? Comment forcer des panels gérés par un Layout à adopter leur preferredSize?

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut Alors dans ce cas...
    Bonjour,

    La réponse qui vous a été donnée tombe sous le sens. Cependant, si vous désirez absolument aboutir dans votre démarche, prenez une feuille de papier, un crayon, et représentez-vous votre table. Utilisez un JPanel global à dimension fixe dont vous fixerez le layout à null.
    Ensuite, remplacez vos partie nord, sud est ouest de votre layout par des JPanel dont définierez la taille et la disposition dans le panel principal par leur méthode setBounds(x, y, larg, haut).
    Pour finir, dans chacun de ces panels de remplacement des dispositions nord, sud est et ouest, organisez le contenu de la même manière. Vous contrôlerez ainsi tout par calcul. Si comme vous le dites, vos table ne sont pas trop grande, c'est jouable. Et en plus, vous ne serez plus obliger de vous prendre la tête avec des layout.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    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
    Sinon un FormLayout sera probablement le layout le plus flexible à utiliser en effet il permet de définir la taille de chaque ligne et colonne de la grille qu'il forme. Il permet également de se baser sur les preferredSize des composants.

    (ce devrait être pareil pour le MigLayout d'ailleurs, mais je le connais moins)

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    merci pour ces conseils.

    Je ne connaissais même pas ces layout....
    Je vais voir ce que ça donne.

Discussions similaires

  1. Problème TextView dépasse un autre Layout
    Par yassin123441 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 24/09/2014, 13h29
  2. Problème de zoom sur un layout
    Par ciolvic dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 03/12/2012, 15h32
  3. Problème de vecteur (avec un layout)
    Par loukiluk dans le forum Débuter
    Réponses: 4
    Dernier message: 03/12/2011, 17h15
  4. Problème avec size()
    Par AYDIWALID dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/02/2010, 16h46
  5. auto size sous table-layout: fixed;
    Par elmaho dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/12/2008, 17h36

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