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 :

Taille d'un JComponent


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Par défaut Taille d'un JComponent
    Bonjour,

    Je dois faire un composant personnalisé en utilisant la base d'un JComponent, mon code est pour le moment comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package fr.test.component;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class MonComp extends JComponent {
        public MonComp() {
            super();
            setSize(500,400);
        }
    
        @Override
    protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Hello World", 10, 10);
        }
    }
    Le code est un code exemple mais qui me permettrait de voir le squelette du composant. Cela marche, j'ai aucune erreur à la compilation, mais lorsque je met sur un panel (GUI Form sur intellij), la taille du composant est de 0 en largeur et en longeur. A l'execution le "hello world" de s'affiche pas. La solution que j'ai de trouver est de lui définir la taille en dehors du plugin, mais pas vraiment ce que je cherche.

    J'ai déjà tester le setsize, setpreferedsize, etc rien ne change.

    Quelqu'un sait comment on défini une taille dans le composant ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    La taille d'un composant est déterminé par le layout du composant dans lequel du l'ajoutes.
    Cette taille peut varier selon le layout et/ou les preferred/minimum/maximum Size...


    Donc la première question à se poser est : quel est ce layout ?


    a++

  3. #3
    Membre Expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    La taille d'un composant est déterminé par le layout du composant dans lequel du l'ajoutes.
    Cette taille peut varier selon le layout et/ou les preferred/minimum/maximum Size...


    Donc la première question à se poser est : quel est ce layout ?


    a++
    A la base c'est un GridLayoutManager. J'ai tester sur un panel qui a un FlowLayout et meme problème, le composant fait en dimension 0 sur la largeur et longueur.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu dois implémenter getPrefered minimum et maximumSize sur ton composant, c'est ce qu'utilise le Layoutmanager pour le dimensionner.

  5. #5
    Membre Expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu dois implémenter getPrefered minimum et maximumSize sur ton composant, c'est ce qu'utilise le Layoutmanager pour le dimensionner.
    Je vais tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package fr.test.component;
    import javax.swing.*;
    import java.awt.*;
     
    public class MonComp extends JComponent {
        public MonComp() {
            super();
            setSize(500,400);
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Hello World", 10, 10);
        }
     
        @Override
        public Dimension getPreferredSize() {
            return super.getPreferredSize();
        }
     
        @Override
        public Dimension getMinimumSize() {
            return super.getMinimumSize();
        }
     
        @Override
        public Dimension getMaximumSize() {
            return super.getMaximumSize();
        }
    }
    Et si je remplace par une taille précise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(500,500);
    }
     
    @Override
    public Dimension getMinimumSize() {
        return new Dimension(200,200);
    }
     
    @Override
    public Dimension getMaximumSize() {
        return new Dimension(1000,1000);
    }
    Pareil, aucun changement Je m'y prend peut etre mal.

    Je sais pas si cela peut aider, quand je l'agrandis sur le panel le contenu du composant (hello world) est bien présent, mais en relachant il revient a la taille 0

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Dans ce cas c'est la taille d'un des composants parent qui est restreinte...

    Il faudrait plus de détail sur la création de ton UI.
    Avec un code minimal qui reproduit le problème...

    a++

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peux montrer le code qui utilise ge composant?

  8. #8
    Membre Expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Dans ce cas c'est la taille d'un des composants parent qui est restreinte...

    Il faudrait plus de détail sur la création de ton UI.
    Avec un code minimal qui reproduit le problème...

    a++
    Citation Envoyé par tchize_ Voir le message
    Tu peux montrer le code qui utilise ge composant?

    J'utilise GUI Form d'intellij pour la creation graphique, le code de la fenetre est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package fr.test.ui;
    import fr.test.component.MonComp;
     
    import javax.swing.*;
     
    public class Hello {
        private JFrame Frame;
        private JPanel PanRoot;
        private MonComp moncomp;
     
     
        public Hello() {
            this.Frame = new JFrame("Hello world");
            this.Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.Frame.setContentPane(this.PanRoot);
            this.Frame.setSize(1280,720);
            this.Frame.setLocationRelativeTo(null);
     
        }
     
        public void setVisible(boolean b) {
            this.Frame.setVisible(b);
        }
    }
    Pas sur que cela vous aide, tous les composants mis sur GUI Form sont sur PanRoot (un JPanel) et je n'ai aucun moyen de voir le code généré. D'ailleur quand je part sur un JButton, JTextField ou JEditorPane au lieu d'un JComponent, je n'ai aucun soucis de taille. Sinon le code du composant est le même que celui au dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package fr.test.component;
    import javax.swing.*;
    import java.awt.*;
     
    public class MonComp extends JComponent {
        public MonComp() {
            super();
            super.setSize(500,500);
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Hello World", 10, 10);
        }
     
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(500,500);
        }
     
        @Override
        public Dimension getMinimumSize() {
            return new Dimension(200,200);
        }
     
        @Override
        public Dimension getMaximumSize() {
            return new Dimension(1000,1000);
        }
    }
    Pour finir j'appelle la fenetre par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Hello helloform = new Hello();
    helloform.setVisible(true);
    Bon ceci dit le getPreferredSize getMinimalSize etc semble fonctionner a l’exécution de la form. Donc j'avance un peu :p

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je ne sais pas comment fonctionne intelliJ, mais ce code est complètement erroné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            this.Frame.setContentPane(this.PanRoot);
    comme PanRoot est null, ceci crée un contenu null dans la JFrame (-> NullPointerException?)

    et ton composant perso n'est utilisé nulle part.

    Commence comme ceci (j'en profite pour corriger les conventions de nommage):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package fr.test.ui;
    import fr.test.component.MonComp;
     
    import javax.swing.*;
     
    public class Hello {
        private JFrame frame;
        private MonComp moncomp;
     
     
        public Hello() {
            this.frame = new JFrame("Hello world");
            this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.frame.setSize(1280,720);
            this.frame.setLocationRelativeTo(null);
            this.frame.getContentPane().add(new MonComp());
     
        }
     
        public void setVisible(boolean b) {
            this.Frame.setVisible(b);
        }
    }

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Faith's Fall Voir le message
    Bon ceci dit le getPreferredSize getMinimalSize etc semble fonctionner a l’exécution de la form. Donc j'avance un peu :p
    Le problème survient seulement dans l'éditeur ? C'est sûrement qu'il te faut créer un ComponentUI spécifique pour qu'il s'affiche bien.

    Déjà essayes d'appeler setPreferredSize() et autres dans le constructeur au lieu de redéfinir getPreferredSize().


    a++

Discussions similaires

  1. [Swing] Récupération de la taille d'un JComponent
    Par dingoth dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/04/2006, 14h44
  2. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 10h05
  3. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  4. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 12h06
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 20h06

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