didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
15 août 2006 à 15:34
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
18 août 2006 à 21:46
bonjour
j'aimerais savoir comment inserer une image dans l'interface graphique d'un programme
je sais que c'est possible, j'ai deja vu ca quelque part mais je ne sais pas comment.
tucobouch
Messages postés194Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 1 mai 200950 15 août 2006 à 15:53
Bonjour,
le plus simple est d'utiliser un JLabel (un composant pour afficher du texte normalement) et de lui mettre une icone (qui serait ton image). Voici le code :
cs_Umbre
Messages postés105Date d'inscriptionjeudi 29 mai 2003StatutMembreDernière intervention17 août 2006 15 août 2006 à 15:59
BonjourJe crois qu'il faut utiliser la librairie awt.
Les classes java.awt.Graphics ou java.awt.Graphics2D
Voir la méthode drawImage de chacune de ces classes
Par contre je ne l'ai jamais utiliser encore alors pour plus de détail...
public void paintComponent(Graphics g) {
if(bg != null){//petit test pour eviter les exceptions
//optionnel mais ca evite les bugs d'affichage
g.setColor(getBackground());
g.fillRect(0, 0, getWidht(), getHeight());
//tu dessine l'image
g.drawImage(bg, 0, 0, this);//pas besoin de mettre null
}
super.paintComponents(g);//super imortant si tu es dans un JPanel sinon tu ne verra pas les composants contenu dedans
}
pour l'explication dis toi simplement qu'en awt on dessine dans paint et en swing dans paintComponent
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
public Test(){
setDefaultCloseOperation(3);
setSize(300, 300);
setLocationRelativeTo(null);
Background bg = new Background("img.png");
bg.add(new JButton("Test"));
setContentPane(bg);
}
public static void main(String [] args){
new Test().setVisible(true);
}
}
class Background extends JPanel{
private static final long serialVersionUID = 7058591096486123469L;
private Image img = null;
public Background(String image){
img = getToolkit().createImage(image);
}
public void paintComponent(Graphics g) {
if(img != null){//petit test pour eviter les exceptions
//optionnel mais ca evite les bugs d'affichage
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
//tu dessine l'image
//on cetre l'image
int w = img.getWidth(this);
int h = img.getHeight(this);
g.drawImage(img, (getWidth() - w) / 2, (getHeight() - h) / 2, this);
}
super.paintComponents(g);//super important si tu es dans un JPanel sinon tu ne verra pas les composants contenu dedans
}
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 15 août 2006 à 19:54
ce que je voulais dire c'est n'y a til pas une methode plus simple du genre 3 clik (sous JBuilder)??
mais si ce n'est pas le cas je prend ta methode. merci
cs_Umbre
Messages postés105Date d'inscriptionjeudi 29 mai 2003StatutMembreDernière intervention17 août 2006 15 août 2006 à 19:56
Voui ca a l'air de marcher sauf que je ne vois pas a quoi sert le bouton mais bon... A moins que ca ne soit pour illustrer le terme background...
Mais pour rajouter une autre image par dessus une autre (avec l'intention de la faire déplacer par la suite mais ca je verrai plus tard) je ne pense pas que je puisse utiliser cette méthode. Quoi que...
Sauf erreur si je bidouille un peu la classe Background que tu as faites je devrais pouvoir m'en sortir... Le principe est toujours le même.
Seulement, je vais être obliger de redessinner l'ensemble à chaque mouvement. Existe-t-il une autre façon de faire ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 15 août 2006 à 19:58
Salut,
Je ne suis pas sous jbuilder, mais cela ne tiens qu'à toi d'en faire un composant à rajouter dans la toolbar de jbuilder mais la c'est pas en si peu de lignes de codes que tu le feras.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 15 août 2006 à 20:19
"n'y a til pas une methode plus simple du genre 3 clik (sous JBuilder)??"
Rah là là, tu ferais pas du VB toi par hasard ?
Sinon, je trouve la méthode de Twinuts très bien pour le SWING, mais perso, je préfère laisser les contrôles faire le boulot qu'ils sont censés faire en utilisant la méthode de tucobouch qui marche très bien, MAIS il faut que l'image soit dans le jar ou le dossier de l'application, forcément !
public void setCoord(int x1, int y1, int x2, int y2)
{
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
}
...
}
Quelque chose dans ce genre la ?
J'ai changer pour afficher 2 images à partire des 2 couple (x,y)
L'affichage se fait bien pour deux images pas de probleme mais j'ai du mal pour le déplacement. Soit il m'affiche le rultat pres déplacement soit (avec le code si dessus) il ne bouge pas du tout... pourtant je ne vois pas vraiment d'erreur...
Elle restent danslecoin supérieur gauche tout le temps...
Quand tu dis repaint(Rectangle) c'est le rectangle ou on repaint ou autre chose ? J'ai vu qu'on pouvais faire sans rectangle mais visiblement ca marche pas trop...
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 15 août 2006 à 20:58
Salut,
pour ton histoire de dessin d'images mattes les sources dans le site il y a pleins d'exemple.
pour le rectangle repaint() va repaindre tout le composant meme les zones qui non pas bougé, tandisque que repain(rectangle) te perme de redessiner seulement une zone
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."