Comme je l'ai mentionné dans le titre, je souhaite customiser quelques objets SWING pour mon appli: JLabel, JTextField, JCombobox.

Il existe déjà pas mal de theads à ce sujet (nottament les L&F), mais dans mon cas, je souhaite faire l'implémentation autrement, c'est à dire en faisant tout à la main.

Mais je ne suis pas vraiment satisfait de mon implémentation: Je n'aime pas trop utiliser AlphaComposite car si la valeur est proche de 1, la fonte peut ne pas etre assez visible. Si au contraire la valeur est proche de 0, alors les couleurs sont trop altérées.

Avez vous des idées pour ne pas avoir ce problème? Existe-t-il d'autres solutions plus simples?

Je poste un exemple de ma classe:

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
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.JTextField;
 
public class CustomizedJTextField extends JTextField {
	private Color blue = new Color(96, 96, 255);
	private Color darkBlue = new Color(0, 0, 64);
 
	public CustomizedJTextField() {
		super();
		this.setLayout(null);
		this.setOpaque(false);
 
		this.setBorder(null);
	}
 
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
 
		Graphics2D graphics2d = (Graphics2D) g;
 
		graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
		graphics2d.setColor(Color.black);
		graphics2d.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
 
		graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
		GradientPaint gradientpaint = new GradientPaint(this.getHeight() / 2, 0.0F, blue, this.getHeight() / 2, this.getHeight(), darkBlue);		
		graphics2d.setPaint(gradientpaint);
 
		graphics2d.fillRoundRect(0, 0, this.getWidth()-1, this.getHeight()-2, 10, 10);
	}
}

Dans ce JTextField customisé, j'ai essayé de mettre un gradient horizontal, d'arrondir les bords, et d'ajouter un effet d'ombre.

Après avoir résolu mon problème, j'aimerai:
- Mettre en place un système de marge intérieure.
- Faire un effet 3D du fond de l'objet.


Merci pour votre aide!


Billy