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 :

Comment faire des bouttons déformés ?


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Par défaut Comment faire des bouttons déformés ?
    Bonjour les amis, j'aimerai construire une interface graphique en java ou il y'a des bouttons déformés: c'est à dire les boutons ne sont plus des rectangles mais par exemple trapèzes. Merci de trouver un fichier joint qui explique.
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Tu peux partir d'un nouveau JComponent/JPanel ou bien etendre AbstractButton ou JButton puis y inclure une Shape ou un Path2D ou encore un Polygon qui represente la zone clicquable du bouton et utiliser cette meme forme pour dessiner le bouton a l'ecran en fonction de son etat (fourni par le ButtonModel si tu herites d'AbstractButton ou JButton).

    Grosso modo.

    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
    public class MyButton extends AbstractButton {
     
       private Shape buttonShape;
     
     
       public MyButton(String text, Icon icon) {
         [...]
         setOpaque(false);
         setPreferredSize(precalculateShapeAndPreferredSize());
       }
     
       /** Mettre des propertyChangeListener sur les proprietes du bouton (text, icon, font, etc...) qui peuvent influencer la taille et recalculer si necessaire.
       */
       private Size precalculateShapeAndPreferredSize() {
          // Caculer la taille de la forme du bouton en fonction de son texte, police, icon, marges et decos.
          ...
       }
     
       @Override
       protected void paintComponent(Graphics g) {
          Dimension size = getSize();
          Insets insets = getInsets();
          int width = size.width - (insets.left + insets.right);
          int height  = size.height - (insets.top + insets.bottom);
          Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height);
          g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          try {
            g2d.setStroke(new BasicStroke(1f));
            g2d.setPaint(Color.BLACK);
            g2d.draw(buttonShape);
          }
          catch (Exception e) {
             g2d.dispose();
         }
       }
    }
    Il faudra egalement gerer les events de la souris pour verifier que tu es bien dans la zone (buttonShape.contains(event.getX(), event.getY()) pour des truc comme l'effet rollover lorsque le curseur est sur le bouton ou quand tu cliques dedans.

    Tu peux egalement utiliser un JXButton de SwingX et bosser avec des Painter histoire de te simplifier la tache au niveau du rendu graphique (mais ce n'est pas une solution miracle non-plus).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 4
    Dernier message: 10/05/2006, 17h19
  3. [SWT] Comment faire des fenetres internes ??????
    Par sebounator dans le forum SWT/JFace
    Réponses: 5
    Dernier message: 22/04/2004, 01h12
  4. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

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