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
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
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.
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 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 : 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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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).
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
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... ).
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
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.
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Et ce n'est pas faute de l'avoir repeter encore et encore...
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager