En premier lieu, le code ci-dessous fonctionne comme prévu (sauf pour la partie que je ne l'ai pas pu tester pour des raisons que je inscrirez ci-dessous)Faire une classe Button (pas d'utilisation du swing)
public class Button implements MouseListener {
String function;
int currentState;
int[] pos;
int[] size;
private BufferedImage normal;
private BufferedImage hover;
private BufferedImage click;
BufferedImage currentImage;
public Button(String func, String location, int[] position,int[] dimensions){
function = func;
//State 0 means not interacted with, State 1 means hovered and state 2 means clicked
currentState = 0;
pos = position;
size = dimensions;
String dpath = "/Images/";
String npath = dpath+location+".png";
String hpath = dpath+location+"h.png";
String cpath = dpath+location+"c.png";
try{
normal =ImageIO.read(getClass().getResource(npath));
hover =ImageIO.read(getClass().getResource(hpath));
click =ImageIO.read(getClass().getResource(cpath));
}catch(Exception e){
System.err.println("Error loading button image: "+ e);
}
currentImage = normal;
}
private void changeState(int c){
currentState = c;
changeImage();
}
private void changeImage(){
if (currentState == 0){
currentImage = normal;
}else if (currentState == 1){
currentImage = hover;
}else if (currentState == 2){
currentImage = click;
}
public int getX(){
return pos[0];
}
public int getY(){
return pos[1];
}
public BufferedImage getSprite(){
return currentImage;
}
Ceci est peint sur l'écran d'une autre classe en utilisant
g.drawImage(but.getSprite(), but.getX(), but.getY(), null);
Je l'ai réglé de façon lorsque le bouton est cliqué plané et laissé seul le bouton utilisera ChangeState() et ChangeImage(). Dans chacune de mes méthodes (mousePressed, mouseReleased, mouseEntered et mouseExited), j'ai défini les paramètres pour qu'ils changent l'image mais pour des raisons évidentes, aucun de ceux-ci ne sera activé sauf si j'ai défini une zone et ce que j'ai read, la zone que le MouseListener peut bien écouter est tout JComponents. Cela signifie-t-il que j'ai besoin d'utiliser un JLabel (en raison de sa nature principalement interactive par défaut) ou existe-t-il un meilleur moyen d'implémenter une zone cliquable?