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

Graphisme Java Discussion :

Créer un bouton avec une taille fixe


Sujet :

Graphisme Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut Créer un bouton avec une taille fixe
    Bonsoir,

    Merci pour les tuto hyper pratique qui font que je suis a mon 4eme post en quelques années...
    enfin quand meme cette fois ci, je suis en galere : voila le probleme :

    Je voudrais faire ma propre classe MyButton qui hérite de JButton et qui prenne en parametre une image (prenons toto.jpg) et une taille (50)

    je voudrais que :
    - l'image fasse 50 * 50 --> c'est bon
    - quelle soit affichée sur le button --> c'est bon
    - que le button fasse 50 * 50 (ou 50 + taille bordure)--> galere

    - pour l'image redimentionnée, je me base sur un bout de code recuperer sur la FAQ (scale) --> pas de prob
    - pour l'image affichee sur un bouton, j'utilise aussi un autre bout de code de la meme FAQ (paintComponent sur lequel je fais un graphics.drawimage) --> pas de prob
    - pour le button avec une taille fixe, le this.setSize(width, height) fait la tete (et a l'affichage getSize() vaut 0, mais si j'ai bien compris, c'est parce qu'il n'est pas encore affiché)


    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Essaie

    button.setMargin(new Insets(0, 0, 0, 0));
    et:
    button.setBorderPainted(false);

    Si l'image fait la bonne taille ça devrait aller

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    the-gtm :
    1 - merci de ton aide
    2 - ca ne marche pas
    3 - mais ca m'a inspiré , il suffisait de rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     setBound(posX, posY, largeur, hauteur);
    4 - est-ce que je peux un peu dévier de sujet parcequ'en fait des fois (oui, oui, des fois) il ne m'affiche pas l'image tant que je ne passe pas dessus...

    bon alors deja nous vous ennervez pas, j'ai lu la FAQ de ce truc la et notamment le fait que lorsque qu'on dessine, il faut tout redefinir, alors voila ce que j'ai :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    class MyButton extends JButton
    {
        // attributs
        private int taille;
        private int x = 0;
        private int y = 0;
        private String pathImg;
        private Toolkit toolkit = Toolkit.getDefaultToolkit();
     
     
        // constructeur --> initialise juste les attributs du dessus
        MyButton( int x, int y, int taille, String pathImg )
        {
        	this.x = x;
        	this.y = y;
    	this.taille = taille;
    	this.pathImg = pathImg;
        } // fin constructeur
     
     
     
     
        // dessinateur
        public void paintComponent(Graphics g)
        {
    	Image i = redimentionner(toolkit.getImage(pathImg), taille);
    	setBounds(x, y, taille, taille);	
    	g.drawImage(i, 0, 0, null);
        } // fin paintComponent
     
     
     
     
        // code du scale 'franciser' sur la FAQ... pas inportant
        public static Image redimentionner( Image imageSrc, int widthHeight )
        {
               BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
     
    	    Graphics2D g = bufferedImage.createGraphics();
    	    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    	    g.drawImage(imageSrc, 0, 0, width, height, null);
    	    g.dispose();
    	    return bufferedImage;
        }
    } // fin class
     
    /*
    puis un main avec une frame.add(new MyButton(0, 0, 30, "C://personne.jpg"))
    enfin, a pu pres...
    */

    bref, est-ce que je dois redéfinir d'autres méthodes à part paintComponent ?

    ensuite, j'ai été intéréssé par le DoubleBufferingSoftware : DoubleBufferingSoftware

    mais j'ai vu que sur mon bouton, je pouvais faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setDoubleBuffered(true);
    est ce que c'est equivalent ?
    je dois le faire a quel moment ?

    ouais ben quand je fais le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setDoubleBuffered(true);
    a tous les coups les images ne s'affichent pas, il faut que je passe dessus.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    il y aurait pas une ame charitable pour m'aider ?
    s....v....p...

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Ok, je comprend pourquoi ça marche pas, utilise une icone (ImageIcon) et setIcon plutot que de surcharger paintComponent, c'est fait pour ça !

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    1) j'ai lu ca sur la faq....

    2) setImageIcon c'est ce que j'ai fait au debut, il ne permet pas de mettre le boutton a la taille pile poil de mon image...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Utilse setIcon + ce que je disais de faire dans ma 1ere réponse. Si ça marche toujours pas, surcharge les méthodes getXXXSize()

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    je vais m'y employé de suite, merci

  9. #9
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    essaye ça, mais je suis pas tres sure que ça marchera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.paintComponent(this.getGraphics() )
    à la fin du constructeur de MyButton en esperant ...

    a+

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    bon, j'ai un peu abandonné la piste du paintcomponent pour tenter d'y arriver par des seticon, setbound, ...

    je galere un peu mais ca avance.


    Maintenant, c'est vrai que independament de ca, on m'a dit (sur le net) que pour redessiner un truc, il fallait plus que simplement redefinir paintComponent,peut etre aussi update ou autre ... avec en plus l'utilisation d'un double buffer...


    je vais essayer de creuser la question,mais la c'est vrai que je ne suis pas hyper actif sur le sujet...

  11. #11
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    • Tu charges ton images et tu la redimensionne à chaque appel de paintComponent() ! Or cette méthode peut être appellé plusieurs fois... il faut donc éviter d'y rajouter des méthodes "lourdes"...
    • Concernant l'image qui ne s'affiche pas de suite, cela vien surement du fait que tu charges l'image avec Toolkit.getImage(). En effet dans ce cas là les images ne sont pas directement chargé en mémoire, mais seulement lors de leurs première utilisations. Du coup il faut utiliser un ImageObserver pour être avertit du chargement complet de l'image...
    • Pour le double-buffered tu n'en a pas vraiment besoin pour ca !!!
    • Enfin, concernant la taille de l'image, cela dépend du LayoutManager que tu utilises ! Tu pourras utiliser setSize() autant de fois que tu veux, c'est le layout qui place et dimensionne les composants. Donc il suffit d'utiliser un Layout adapté à ton cas...



    Enfin la meilleure solution reste d'utiliser la gestion des icones du JButton, en supprimant la marge et la bordure (et eventuellement avec setContentAreaFilled() pour empêcher le background du bouton d'être déssiné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class JImageButton extends JButton {
     
    	public JImageButton(Image image) {
    		super(new ImageIcon(image));
    	}
     
    	@Override
    	public void updateUI() {
    		super.updateUI();
    		setMargin(new Insets(0,0,0,0));	// Pas de marge
    		setBorder(null);				// Pas de bordure
    		setContentAreaFilled(false);	// Ne dessine pas le bouton
    	}
    }

    a++

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2010, 00h02
  2. Créer un div avec une taille definie
    Par sorceleur dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/08/2009, 10h59
  3. [GD] Redimensionner une image avec une taille fixe
    Par Aspic dans le forum Bibliothèques et frameworks
    Réponses: 29
    Dernier message: 20/07/2008, 14h57
  4. Comment ouvrir une fentre avec une taille fixe en javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/07/2007, 16h54

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