Bonjour,

Je viens vous demander aide & conseils ici à propos de deux petites choses..

Pour un 'jeu' ( coder pour apprendre ), j'ai une grille selon x-y où je stocke des objets ( les unités de jeu ).

D'un point de vue graphique, j'ai une JPanel ( remplis d'une texture ). . L'enjeu étant de représenter ses unités de jeu et de pouvoir les selectionner. Premiere chose à laquelle j'ai pensé, ca a été de faire une grille ( GridLayout ) de JButton avec icone ( genre icone de Soldat ) car les JButton sont aisé à controlé pour le clique. J'ai étendu les JButton pour les rendre transparent, malheuresement, deux soucis : 1/ Les JButton sont entiérement transparent, pas d'icône donc ! 2/ C'est pas vraiment optimiser pour une grande grille de jeu, autant de JButton.. Lent..

  • Avez vous une idée quant à ma carte ? ( Autre solution que les JButtons ? <=> Comment savoir sur quelle unité à t'on cliquer ? )
  • Et/Ou savez vous comment rendre le JButton transparent tout en conservant la visibilité de l'icône ?



Merci !


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
package army.gui;
 
import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JButton;
 
public class JTransparentButton extends JButton {
 
	public JTransparentButton() {
		super();
		this.setOpaque(false);
	}
 
	public JTransparentButton(Action a) {
		super(a);
		this.setOpaque(false);
	}
 
	public JTransparentButton(Icon icon) {
		super(icon);
		this.setOpaque(false);
	}
 
	public JTransparentButton(String text, Icon icon) {
		super(text, icon);
		this.setOpaque(false);
	}
 
	public JTransparentButton(String text) {
		super(text);
		this.setOpaque(false);
	}
 
	public void paint(Graphics g) { 
	    Graphics2D g2 = (Graphics2D) g.create(); 
	    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f)); 
	    super.paint(g2); 
	    g2.dispose();
	}
 
}