Button graphique effet glass

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 210 fois - Téléchargée 19 fois

Contenu du snippet

Une petite source sans prétention pour montrer qu'il est très simple de faire du design en java !

Je tire ce design de ce site (où tout est expliqué) :
http://www.attitudedesign.co.uk/journal/?p=55

Cette source est déjà présente sur le site ASP il me semble, c'est grâce à cette source que j'ai trouvé le lien du site.

Il m'a donc suffit de reprendre le concept pour le transcrire en java.

Ca donne une effet assez sympa en très peu de lignes de code, et ca peut faire de jolis boutons ronds par exemple.

Source / Exemple :


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JFrame;

public class FrmMain extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private final static int BULLE_WIDTH = 50;
	private final static Color BULLE_COLOR = Color.BLUE;
	
	public FrmMain() {
		setBounds(0, 0, BULLE_WIDTH * 2, BULLE_WIDTH * 2);
		setVisible(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	
	public void paint(Graphics g) {
		super.paint(g);
		Graphics2D g2d = (Graphics2D) g;
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2d.setColor(BULLE_COLOR);
		g2d.setStroke(new BasicStroke(3));
		g2d.drawOval(10, 50, BULLE_WIDTH, BULLE_WIDTH);
		GradientPaint gradient = new GradientPaint(BULLE_WIDTH / 2, 50, BULLE_COLOR, BULLE_WIDTH / 2, 50 + BULLE_WIDTH , Color.white);
		g2d.setPaint(gradient);
		g2d.fillOval(10, 50, BULLE_WIDTH, BULLE_WIDTH);
		gradient = new GradientPaint(BULLE_WIDTH / 2, 50, Color.white, BULLE_WIDTH / 2, 50 + BULLE_WIDTH / 2, new Color(BULLE_COLOR.getRed(), BULLE_COLOR.getGreen(), BULLE_COLOR.getBlue(), 0));
		g2d.setPaint(gradient);
		g2d.fillOval(10 + BULLE_WIDTH / 5, 50, 5 * BULLE_WIDTH / 8, BULLE_WIDTH / 3);
	}
	
	public static void main(String[] args) {
		new FrmMain();
	}

}

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
3 mai 2011

Bonjour à vous !
J'ai trouvé l'idée vraiment sympa et donc je l'ai essayé

Seulement ca ne donne pas le résultat escompté!

j'ai simplement utilisé les 5 constructeurs de MainButton et ai affiché les boutons dans une JFrame

le resultat et que pour tous les constructeurs on obtiens un "demi bouton" comprenez qu'on ne voit que l'hemisphere nord du boutton

de plus le constructeur MainButton(Color c) ne change pas la couleur

et MainButton(Icon icon) rajoute licone DERRIERE le dit boutton , elle est donc invisible...

bon je n'ai fait que tester le code fournit et ne me suis pas encore pencher sur les eventuelles erreurs puisque je ne me suis pas encore essayé a la personalisation de composants

par contre si vous aviez une version corrigée ca m'interresserait! ^^

Amicalement, Joe.
Messages postés
8
Date d'inscription
jeudi 22 octobre 2009
Statut
Membre
Dernière intervention
11 novembre 2009

Je s8 heureux
ca code tre fort
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
Très bien, c'est une bonne évolution de ma source.

Bien vu ;)

DarK Sidious
Messages postés
13
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
20 novembre 2015

bonjour,

J'ai trouvé ca tellement génial que j'en ai fait ma propre adaptation.
Je vous la mets à disposition :

package com.ui.comp;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JButton;

public class MainButton extends JButton {
private static final long serialVersionUID = 1L;

private final int BULLE_WIDTH = 50;

private Color BULLE_COLOR = Color.green.darker(); // @jve:decl-index=0:

private Color BULLE_COLOR_B = BULLE_COLOR.brighter(); // @jve:decl-index=0:

private Color currentColor = BULLE_COLOR;

private int x = 5;

private int y = 5;

public MainButton() {
initialize();
}

public MainButton(Color BULLE_COLOR) {
this.BULLE_COLOR = BULLE_COLOR.darker();
initialize();
}

public MainButton(Icon arg0) {
super(arg0);
initialize();
}

public MainButton(String arg0) {
super(arg0);
initialize();
}

public MainButton(Action arg0) {
super(arg0);
initialize();
}

public MainButton(String arg0, Icon arg1) {
super(arg0, arg1);
initialize();
}

/**
* This method initializes this
*
*/
private void initialize() {
this.setFocusPainted(false);
this.setSize(new Dimension(BULLE_WIDTH + 10, BULLE_WIDTH + 10));
this.setBorderPainted(false);
this.setContentAreaFilled(false);
this.setOpaque(false);
this.addMouseListener(new java.awt.event.MouseListener() {
public void mouseEntered(java.awt.event.MouseEvent e) {
// si la souris passe au dessus du bouton et que le bouton est
// actif...
if (isEnabled()) {
// on change la couleur
currentColor = BULLE_COLOR_B;
}
}

public void mouseClicked(java.awt.event.MouseEvent e) {
}

public void mousePressed(java.awt.event.MouseEvent e) {
x += 2;
y += 2;
}

public void mouseReleased(java.awt.event.MouseEvent e) {
x -= 2;
y -= 2;
}

public void mouseExited(java.awt.event.MouseEvent e) {
// si la souris sort du bouton et que le bouton est actif...
if (isEnabled()) {
// on rétablit la couleur d'origine
// System.out.println("couleur d'origine");
currentColor = BULLE_COLOR;
}
}
});
}

@Override
public void paint(Graphics arg0) {
super.paint(arg0);
Graphics2D g2d = (Graphics2D) arg0;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(currentColor);
g2d.setStroke(new BasicStroke(3));
g2d.drawOval(x, y, BULLE_WIDTH, BULLE_WIDTH);
GradientPaint gradient = new GradientPaint(BULLE_WIDTH / 2, y,
currentColor, BULLE_WIDTH / 2, y + BULLE_WIDTH, Color.white);
g2d.setPaint(gradient);
g2d.fillOval(x, y, BULLE_WIDTH, BULLE_WIDTH);
gradient = new GradientPaint(BULLE_WIDTH / 2, y, Color.white,
BULLE_WIDTH / 2, y + BULLE_WIDTH / 2, new Color(currentColor
.getRed(), currentColor.getGreen(), currentColor
.getBlue(), 0));
g2d.setPaint(gradient);
g2d.fillOval(x + BULLE_WIDTH / 5, y, 5 * BULLE_WIDTH / 8,
BULLE_WIDTH / 3);
}

} // @jve:decl-index=0:visual-constraint="10,10"

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.