salut tout le monde
je débute avec les swing et je ne sais pas comment faire pour afficher une image dans un swing?
merci de m'aider
Version imprimable
salut tout le monde
je débute avec les swing et je ne sais pas comment faire pour afficher une image dans un swing?
merci de m'aider
Bonjour, regarde les classes : JLabel et ImageIcon. Ca devrait t'aider.
Pour dessiner dans un JPanel :
Tu dois dériver la classe JPanel et redéfinir la méthode paintComponent(Graphics g);
Voilà, t'as plus qu'a ajouter ton JPanel perso à ta fenêtre. Bonne fin de journée. :wink:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class monPanel extends JPanel { private Image monImage; public monPanel(Image monImage) { this.monImage=monImage; } public void paintComponent(Graphics g) { super(g); Graphics2D g2D=(Graphics2D )g; g2D.drawImage(monImage,0,0,null); } }
merci pour votre aide mais vu ke je débute jé besoin d'un exemple alors si vous pouvez me filé un lien ce sera sympa
merci
voila jé trouvé un truc mais j'arrive pas à voir l'image
package mypackage1;
// Time-stamp: <ImageView.java 13 mai 2003 11:28:59>
import java.awt.*;
import javax.swing.*;
/**
* Visualisation d'une image
* @author O. Carton
* @version 1.0
*/
class ImageView extends JFrame {
Image image; // L'image
public ImageView () {
// Titre de la fenêtre
setTitle("Visualisation d'une image");
// Action à faire lorsque la fenêtre est fermée.
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Lecture de l'image par le tookit par défaut
image = Toolkit.getDefaultToolkit().getImage("C:\butterfly.jpg");
// Affichage des dimensions de l'image
// Ces deux lignes affichent "Image width = -1, height = -1"
// car l'image n'est pas encore chargée
System.out.print("Image : width = " + image.getWidth(this));
System.out.println(", height = " + image.getHeight(this));
// Place le composant
setContentPane(new ImagePane());
}
/** Panneau pour afficher l'image */
// Une méthode naïve consiterait à dessiner l'image directement dans
// l'objet JFrame en redéfinissant la méthode paint dans la classe
// ImageView. On peut remarquer que le haut de l'image n'est
// pas visible avec un appel g.drawImage(image, 0, 0, this);
// Pour éviter ce problème, l'image est dessiner dans un panneau
// qui devient le contentPane de la fenêtre.
class ImagePane extends JPanel {
ImagePane() {
// Taille du panneau égale à la taille de l'image
/*Graphics toto;
toto.create();*/
setPreferredSize(new Dimension(377,517));
// paintComponent(toto);
}
// Dessins de la fenêtre
public void paintComponent(Graphics g) {
// Appel à la méthode de la super-classe
super.paintComponent(g);
// Dessin de l'image
g.drawImage(image, 0, 0, this);
}
}
public static void main(String [] args)
{
// Création de la fenêtre
ImageView view = new ImageView();
// Mise en place
view.pack();
// Affichage de la fenêtre
view.setVisible(true);
}
}
Deux choses : :tagcode: parce que la c'est pas donné.
et je pense qu'un petit setVisible(true); à la fin du constructeur de ImageView devrait suffire.
merci xvalours mais é ce ke tu peux etre + précis surtt pour le 1 point
j'ai un peu le meme probleme que toi. J'ai reussi a cherger une image. En revanche je ne parviens pas a mettre du Jtextarea par dessus par exemple.
Je pense que reecrire paint component permettra ensuite de pouvoir ecrire du textArea dans l'image
j'ai tente :
Ca n'affiche pas l'image quelle erreur ai je fait ?Code:
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 private BufferedImage image; public SwingImageButton() { super("Swing Button Example"); /*Load an image */ String filename="portable.JPG"; image = new BufferedImage(290, 470, BufferedImage.TYPE_INT_RGB); // create an image by reading in the PNG, GIF, or JPEG from a filename try { image = ImageIO.read(new File(filename)); } catch(IOException e) { e.printStackTrace(); throw new RuntimeException("Could not open file: " + filename); } //JAI PAS MIS lE RESTE DU CODE A PARTIR DE CETTE LIGNE public void paintComponent(Graphics g) { //super(g); Graphics2D g2D=(Graphics2D )g; g2D.drawImage(this.image,20,40,this); // g.drawImage( this.tempImage, 10, 10, this); }
Tu as dérivé JTextArea et redéfini paintComponent(Graphics g) dans la classe enfant si j'ai bien compris ?? N'oublie pas de faire le super.paintComponent(g); (je m'étais gouré en mettant :super(g);)
mais à la fin de la redéfinition de paintComponent.
Si tu travail avec java 1.5 tu peut essayer de mettre @Override devant ta méthode paintComponent pour être sûr que tu redéfinis bien celle de la classe parente.
Et pour charger une image, il y a plus simple :
Ce qui en passant te permettra de placer ton image dans le jar de ton projet par exemple...Code:
1
2 ImageIcon monIcon=new ImageIcon(ClassLoader.getSystemResource("portable.JPG")); Image monImage=monIcon.getImage()
Pour afficher une image en fond de JTextArea j'utiliserai plutot la methode suivante :
- un JPanel qui affiche l'image (chercher sur le forum, cette methode a deja ete archi-decrite);
- un JTextArea sur laquelle on a fait setOpaque(false);
Optionnel, si la JTextArea est dans un JScrollPane :
- faire myScrollPane.setOpaque(false);
- faire myScrollPane.getViewPort().setOpaque(false);
Normalement ca devrait fonctionner...
Marche aussi avec les JTree, les JTable et les JList ; mais dans ce cas il faut aussi penser a faire setOpaque(false) sur leur renderer et leur row header (mais en general celui-la je le laisse opaque car ca rend mal).
Pas mal, je savais pas qu'on pouvais vaire des JTextArea transparents, merci pour l'info. :ccool:Citation:
un JTextArea sur laquelle on a fait setOpaque(false);
Pourtant lorsque je fais du
JPanel p = new JPanel();
p.add(image);
j'obtiens une erreur comme quoi cette methode n'existe pas pour les objets de type image.
En revanche pour Jlabel cela marche correctement l'image est affichee mais il absorbe le textarea meme avec setopaque.
Car il n'existe pas de methode add(Image) dans la classe JPanel.
Voir les codes que je t'ai donne dans un de tes autres topics (.... beaucoup de threads/posts differents ces temps-ci... :wink: ).
j'ai regarde quelques precedents topics mais j'ai pas vu de methode de type:
Jpanel.methode(image); !! dsl
quel ets le nom de cette methode stp ?
Voir ici, tout a la fin de la discusion, tu as le code d'un ImagePanel.
Juste une remarque en passant :
Faire l'appel super(g) s'applique à un constructeur. C'est plutôt super.paintComponent(g) pour appeler la méthode du parent.Code:
1
2
3
4
5
6
7
8
9 public void paintComponent(Graphics g) { super(g); Graphics2D g2D=(Graphics2D )g; g2D.drawImage(monImage,0,0,null); } }
Ouai, je sais, pour info je me suis corrigé quelques posts plus haut...Citation:
Envoyé par dr00w
Il n'y en a pas! tes deux solution pour afficher une image dans un JPanel, c'est soit de la dessiner manuellement comme je te l'ai montré plus haut ou de l'afficher dans un JLabel...Citation:
Envoyé par Battosaiii
Et ce n'est pas faute de l'avoir repeter encore et encore...