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 :

[Design] Bouton avec effet lumineux


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut [Design] Bouton avec effet lumineux
    Bonjour,

    Depuis pas mal de temps on voit énormément d'interface avec des boutons ou des surfaces avec un effet lumineux . Cela fait un peu genre peinture métallisée.


    Par exemple un peu comme le bouton "démarrer" de window vista .

    Comment peut on réaliser ce genre de bouton très design ? Es qu'il faut forcément les fabriquer à partir de logiciel de dessin genre gimp ou photoshop ?

    Ou alors es que l'on peut utiliser une couleur spéciale en java qui aurait un effet peinture métallisée ?

    Et enfin si je veux créer des formes diverses avec un effet comme sur le bouton de vista . Quand on passe la souris dessus il devient plus lumineux ?

    Une idée pour réaliser ce genre d'effet ?

    Ma première idée qui me viens à l'esprit est d'utiliser différentes images ou l'on a crée ce genre d'effet mais ça me parais un peu lourd si on a beaucoup forme s simples avec de nombreuses couleurs .

    Alors je me dis qu'il y a surement une astuce à utiliser ?


    Merci.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah non pas d'astuces.

    Ta couleur métallisée c'est un gradient, et que ce soit en java ou sous photoshop il faudra la dessiner...

    Pour la gestion du rollover (plus lumineux quand la souris est dessus par exemple), il te suffit de créer des icônes correspondant aux différents états du bouton: standard, survolé, cliqué, désactivé ... et d'utiliser les méthodes définies au niveau du JButton pour que le JButton en change automatiquement au moment idoine. setIcon/setRolloverIcon/setRolloverSelectedIcon/setDisabledIcon/setPressedIcon/setDisabledSelectedIcon
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    La gestion des etats et du rollover peut bien sur etre faite avec des images chargees du disque mais elle peut etre aussi faite "au vol" en surchargeant paintComponent() et en utilisant les bonnes Composite et/ou des BufferedImage intermediaires. Voir du cote de SwingX pour des composites supplementaires non-incluses de base dans l'API mais que l'on trouve dans la plupart des logiciels de dessins/retouche d'images correct telles que colorDodge, hardLight ou multiply (voir org.jdesktop.swingx.graphics.BlendComposite) qui sont TRES TRES utiles pour faire ce genre d'effets.

    De meme que les support des Painter dans SwingX permettent de skinner un JXButton plutot aisement.

    J'avais fait cela il y a un peu plus d'un an avec une ancienne version de SwingX :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package org.spc.ofp.raptor;
     
    import java.awt.AlphaComposite;
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Composite;
    import java.awt.Graphics2D;
    import java.awt.Insets;
    import java.awt.LinearGradientPaint;
    import java.awt.Paint;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;
    import java.awt.Shape;
    import java.awt.Stroke;
    import java.awt.geom.Area;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import javax.swing.AbstractButton;
    import javax.swing.ButtonModel;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import org.jdesktop.swingx.graphics.BlendComposite;
    import org.jdesktop.swingx.graphics.GraphicsUtilities;
    import org.jdesktop.swingx.image.GaussianBlurFilter;
    import org.jdesktop.swingx.painter.AbstractPainter;
     
    class JellyButtonPainter<T extends AbstractButton> extends AbstractPainter<T> {
      // Button shape.
      private RoundRectangle2D.Float rect = new RoundRectangle2D.Float();
      //Bakcground.
      private float[] backgroundFractions = {0, 0.4999f, 0.5f, 1f};
      private Color[] backgroundColors = {new Color(98, 108, 136), new Color(63, 71, 86), new Color(17, 17, 17), new Color(59, 70, 110)};
      private Paint backgroundPaint;
      // Outer border.
      private Paint outerBorderPaint = Color.BLACK;
      private Stroke outerBorderStroke = new BasicStroke(1.0f);
      private Composite outerBorderComposite = AlphaComposite.SrcOver;
      // Inner border.
      private float[] innerBorderFractions = {0, 0.4999f, 0.5f, 1f};
      private Color[] innerBorderColors = {Color.WHITE, new Color(105, 105, 105), Color.WHITE, new Color(105, 105, 105)};
      private Composite innerBorderComposite = BlendComposite.Screen.derive(0.5f);
      private Paint innerBorderPaint;
      private Stroke innerBorderStroke = new BasicStroke(3.0f);
      // Glow
      private BufferedImage glowImage;
      private Composite glowComposite = BlendComposite.ColorDodge;
      // Sate paints.
      private Paint armedPaint = new Color(64, 64, 64);
      private Paint selectedPaint = new Color(104, 158, 216);
      private Paint armedSelectedPaint = new Color(50, 118, 190);
      private Paint rolloverSelectedPaint = new Color(136, 179, 224);
      private float[] rolloverFractions = {0.0f, 0.05f, 0.35f, 1.0f};
      private Color[] rolloverColors = {Color.WHITE, Color.WHITE, new Color(127, 127, 127, 0), new Color(127, 127, 127, 0)};
      private Paint rolloverPaint;
      private Paint disabledPaint = new Color(192, 192, 192);
      private Paint disabledSelectedPaint = new Color(160, 160, 160);
      // State composites.
      private Composite highlights1Composite = BlendComposite.HardLight.derive(0.5f);
      private Composite highlights2Composite = BlendComposite.Overlay.derive(0.3f);
      private Composite highlights3Composite = BlendComposite.ColorDodge.derive(0.3f);
      /** Last know width.
       */
      private int width;
      /** Last known height.
       */
      private int height;
     
      /** the button's image.
       */
      public JellyButtonPainter(T target) {
        // Make use of abstract painter's cacheability feature.
        setCacheable(true);
        // But then we need to be aware when the button's state changes.
        target.addChangeListener(new ChangeListener() {
     
          public void stateChanged(ChangeEvent event) {
            // Will provoke a redraw of the cached image.
            setDirty(true);
          }
        });
      }
     
      /** Rerender glow intermediate image.
       * @param object The target object.
       * @param width Width of the drawing area.
       * @param height Height of the drawing area.
       */
      private void createGlowImage(T object, int width, int height) {
        if (width <= 0 || height <= 0) {
          return;
        }
        int rectX = (int) Math.floor(rect.getX());
        int rectY = (int) Math.floor(rect.getY());
        int rectWidth = (int) Math.ceil(rect.getWidth());
        int rectHeight = (int) Math.ceil(rect.getHeight());
        glowImage = GraphicsUtilities.createCompatibleTranslucentImage(width, height);
        //glowImage = GraphicsUtilities.createCompatibleTranslucentImage(rectWidth, rectHeight);
        // Draw base shape.
        Graphics2D g = glowImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.setColor(new Color(136, 179, 224));
        //g.fillOval(5, (int) (rectHeight * 2 / 3f), rectWidth - 5, (int) (rectHeight * 2 / 3f));
        g.fillOval(rectX + 5, (int) (rectY + rectHeight * 2 / 3f), rectWidth - 2 * 5, (int) (rectHeight * 2 / 3f));
        g.dispose();
        // Apply gaussian blur.
        // Hum values are funny, I used a 5.0 blur in PSP and here it requires a double-15 blur and still does not look OK.
        // Documentation is odd, only uses integer but mentions 0.1 radius.
        GaussianBlurFilter gaussianBlur = new GaussianBlurFilter(15);
        glowImage = gaussianBlur.filter(glowImage, null);
        glowImage = gaussianBlur.filter(glowImage, null);
        glowImage = gaussianBlur.filter(glowImage, null);
        // Hack.
        // Clear outsite parts.
        g = glowImage.createGraphics();
        Area area = new Area(new Rectangle(0, 0, width, height));
        area.subtract(new Area(rect));
        g.setClip(area);
        g.setComposite(AlphaComposite.Clear);
        g.fillRect(0, 0, width, height);
        g.dispose();
      }
     
      private void renderButton(Graphics2D g, T object, int width, int height) {
        int rectX = (int) Math.floor(rect.getX());
        int rectY = (int) Math.floor(rect.getY());
        int rectWidth = (int) Math.ceil(rect.getWidth());
        int rectHeight = (int) Math.ceil(rect.getHeight());
        Shape oldClip = g.getClip();
        g.setClip(rect);
        backgroundPaint = new LinearGradientPaint(0, 0, 0, rectHeight, backgroundFractions, backgroundColors);
        innerBorderPaint = new LinearGradientPaint(0, 0, 0, rectHeight, innerBorderFractions, innerBorderColors);
        rolloverPaint = new LinearGradientPaint(0, 0, 0, rectHeight, rolloverFractions, rolloverColors);
        // Background.
        g.setPaint(backgroundPaint);
        g.fill(rect);
        // Hightlights.
        //System.out.println("Armed: "+model.isArmed());
        //System.out.println("Enabled: "+model.isEnabled());
        //System.out.println("Pressed: "+model.isPressed());
        //System.out.println("Rollover: "+model.isRollover());
        //System.out.println("Selected: "+model.isSelected());
        //System.out.println();
        Paint paint = null;
        ButtonModel model = object.getModel();
        if (!model.isEnabled() && model.isSelected()) {
          paint = disabledSelectedPaint;
        }
        else if (!model.isEnabled()) {
          paint = disabledPaint;
        }
        else if (model.isArmed() && model.isSelected()) {
          paint = armedSelectedPaint;
        }
        else if (model.isRollover() && model.isSelected()) {
          paint = rolloverSelectedPaint;
        }
        else if (model.isSelected()) {
          paint = selectedPaint;
        }
        else if (model.isArmed()) {
          paint = armedPaint;
        }
        else if (model.isRollover()) {
          paint = rolloverPaint;
        }
        if (paint != null) {
          g.setPaint(paint);
          // Highlights 1.
          g.setComposite(highlights1Composite);
          g.fill(rect);
          // Highlights 2.
          g.setComposite(highlights2Composite);
          g.fill(rect);
          // Highlights 3.
          g.setComposite(highlights3Composite);
          g.fill(rect);
        }
        // Inner glowImage.
        if ((model.isRollover() || model.isSelected() || model.isArmed()) && glowImage != null) {
          // Hack.
          g.setClip(oldClip);
          g.setComposite(glowComposite);
          //g.setComposite(AlphaComposite.SrcOver);
          try {
          g.drawImage(glowImage, 0, 0, null);
          //g.drawImage(glowImage.getSubimage(rectX, rectY, rectWidth, rectHeight), rectX, rectY, null);
          //g.drawImage(glowImage, rectX, rectY, null);
          }
          catch (Exception e) {
            System.err.println(glowImage.getWidth()+", "+glowImage.getHeight()+"\t"+width+", "+height);
            e.printStackTrace();
          }
          // Hack.
          g.setClip(rect);
        }
        // Inner border.
        g.setComposite(innerBorderComposite);
        g.setPaint(innerBorderPaint);
        g.setStroke(innerBorderStroke);
        g.draw(rect);
        g.setClip(oldClip);
        // Outer border.
        g.setComposite(outerBorderComposite);
        g.setStroke(outerBorderStroke);
        g.setPaint(outerBorderPaint);
        g.draw(rect);
      }
     
      /** {@inheritDoc}
       */
      @Override
      protected void doPaint(Graphics2D g, T object, int width, int height) {
        //Insets insets = object.getMargin();
        //rect.setRoundRect(insets.left, insets.top, width - (insets.left + insets.right) - 1, height - (insets.top + insets.bottom) - 1, 10, 10);
        rect.setRoundRect(0, 0, width - 1, height - 1, 10, 10);
        if (width != this.width || height != this.height || glowImage == null) {
          createGlowImage(object, width, height);
          this.width = width;
          this.height = height;
        }
        renderButton(g, object, width, height);
      }
    }
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    /*
     * JellyButtonTest.java
     *
     * Created on June 17, 2008, 11:38 AM
     */
    package org.spc.ofp.raptor;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import javax.swing.ButtonModel;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import org.jdesktop.swingx.JXButton;
     
    /**
     *
     * @author  fabriceb
     */
    public class JellyButtonTest extends javax.swing.JPanel {
     
      /** Creates new form JellyButtonTest */
      public JellyButtonTest() {
        initComponents();
        // 1 - default.
        jXButton1.setText("Default");
        // 2 - rollover.
        jXButton2.getModel().setRollover(true);
        jXButton2.setText("Rollover");
        // 3 - rollover + armed.
        jXButton3.getModel().setRollover(true);
        jXButton3.getModel().setArmed(true);
        jXButton3.setText("Rollover + armed");
        // 4 - selected.
        jXButton4.getModel().setSelected(true);
        jXButton4.setText("Selected");
        // 5 - rollover + selected.
        jXButton5.getModel().setRollover(true);
        jXButton5.getModel().setSelected(true);
        jXButton5.setText("Rollover + selected");
        // 6 - rollover + armed + selected.
        jXButton6.getModel().setRollover(true);
        jXButton6.getModel().setArmed(true);
        jXButton6.getModel().setSelected(true);
        jXButton6.setText("Rollover + armed + selected");
        // 7 - disabled.
        jXButton7.getModel().setEnabled(false);
        jXButton7.setText("Disabled");
        // 8 - disabled + rollover.
        // This line needs to be 1st!
        jXButton8.getModel().setRollover(true);
        jXButton8.getModel().setEnabled(false);
        jXButton8.setText("Disabled + rollover");
        // 8 - disabled + selected.
        // This line needs to be 1st!
        jXButton9.getModel().setSelected(true);
        jXButton9.getModel().setEnabled(false);
        jXButton9.setText("Disabled + selected");
        JXButton[] buttons = {jXButton1, jXButton2, jXButton3, jXButton4, jXButton5, jXButton6, jXButton7, jXButton8, jXButton9};
        for (JXButton button : buttons) {
          // Undecorate button.
          button.setForeground(Color.WHITE);
          button.setRolloverEnabled(true);
          button.setBorderPainted(false);
          button.setOpaque(false);
          button.setContentAreaFilled(false);
          button.setBackgroundPainter(new JellyButtonPainter<JXButton>(button));
          // Construct tooltip.
          ButtonModel model = button.getModel();
          StringBuilder builder = new StringBuilder();
          builder.append("<html><body>");
          builder.append("Armed: ").append(model.isArmed()).append("<br>\n");
          builder.append("Enabled: ").append(model.isEnabled()).append("<br>\n");
          builder.append("Pressed: ").append(model.isPressed()).append("<br>\n");
          builder.append("Selected: ").append(model.isSelected()).append("<br>\n");
          builder.append("Rollover: ").append(model.isRollover()).append("<br>\n");
          builder.append("</body></html>");
          button.setToolTipText(builder.toString());
        }
      }
     
      public static void main(String... args) {
        SwingUtilities.invokeLater(new  
     
            Runnable() {
     
     
     
     
     
     
     
                public void run() {
            try {
              UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            }
            catch (Exception e) {
              e.printStackTrace();
            }
            JFrame test = new JFrame("Test");
            test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            test.setLayout(new BorderLayout());
            test.add(new JellyButtonTest(), BorderLayout.CENTER);
            test.pack();
            test.setVisible(true);
          }
        });
      }
     
      /** This method is called from within the constructor to
       * initialize the form.
       * WARNING: Do NOT modify this code. The content of this method is
       * always regenerated by the Form Editor.
       */
      @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
      private void initComponents() {
     
        jXButton1 = new org.jdesktop.swingx.JXButton();
        jXButton2 = new org.jdesktop.swingx.JXButton();
        jXButton3 = new org.jdesktop.swingx.JXButton();
        jXButton4 = new org.jdesktop.swingx.JXButton();
        jXButton5 = new org.jdesktop.swingx.JXButton();
        jXButton6 = new org.jdesktop.swingx.JXButton();
        jXButton7 = new org.jdesktop.swingx.JXButton();
        jXButton8 = new org.jdesktop.swingx.JXButton();
        jXButton9 = new org.jdesktop.swingx.JXButton();
     
        setLayout(new java.awt.GridLayout(3, 3));
     
        jXButton1.setText("Text1");
        jXButton1.setName("jXButton1"); // NOI18N
        add(jXButton1);
     
        jXButton2.setText("Text1");
        jXButton2.setName("jXButton2"); // NOI18N
        add(jXButton2);
     
        jXButton3.setText("Text1");
        jXButton3.setName("jXButton3"); // NOI18N
        jXButton3.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
            jXButton3ActionPerformed(evt);
          }
        });
        add(jXButton3);
     
        jXButton4.setText("Text1");
        jXButton4.setName("jXButton4"); // NOI18N
        add(jXButton4);
     
        jXButton5.setText("Text1");
        jXButton5.setName("jXButton5"); // NOI18N
        add(jXButton5);
     
        jXButton6.setText("Text1");
        jXButton6.setName("jXButton6"); // NOI18N
        add(jXButton6);
     
        jXButton7.setText("Text1");
        jXButton7.setName("jXButton7"); // NOI18N
        add(jXButton7);
     
        jXButton8.setText("Text1");
        jXButton8.setName("jXButton8"); // NOI18N
        add(jXButton8);
     
        jXButton9.setText("Text1");
        jXButton9.setName("jXButton9"); // NOI18N
        add(jXButton9);
      }// </editor-fold>                        
     
    private void jXButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    }                                         
      // Variables declaration - do not modify                     
      private org.jdesktop.swingx.JXButton jXButton1;
      private org.jdesktop.swingx.JXButton jXButton2;
      private org.jdesktop.swingx.JXButton jXButton3;
      private org.jdesktop.swingx.JXButton jXButton4;
      private org.jdesktop.swingx.JXButton jXButton5;
      private org.jdesktop.swingx.JXButton jXButton6;
      private org.jdesktop.swingx.JXButton jXButton7;
      private org.jdesktop.swingx.JXButton jXButton8;
      private org.jdesktop.swingx.JXButton jXButton9;
      // End of variables declaration                   
    }
    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. Réponses: 0
    Dernier message: 17/03/2013, 00h03
  2. bouton avec texte : effet indésirable
    Par awalter1 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/03/2012, 18h44
  3. Bouton avec effet relief en rondeur
    Par Uren dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/01/2008, 16h20
  4. Réponses: 4
    Dernier message: 08/11/2007, 16h15
  5. besoin aide bouton avec effet zoom fonctionne pas.
    Par zicomoun dans le forum Flash
    Réponses: 3
    Dernier message: 13/06/2006, 08h15

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