J'essaie de me dépatouiller pour récupérer un fichier image après une selection dans une boite de dialogue JFileChooser et l'afficher dans un panneau graphique. Je ne sais comment faire pour récupérer la source du fichier. Pourriez-vous m'aider ?
Voici les codes:
Main
package Logiciel;
import logiciel_fenetre.Fenetre;
public class Main {
public static void main(String[] args) {
new Fenetre ();
}
}
fenetre
package logiciel_fenetre;
/**
* @Author Pascal DV
* Version 1
* Logiciel OCR et de garde de mise en page.
*/
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
@SuppressWarnings("serial")
public class Fenetre extends JFrame{
public static final String newline = null;
//Création d'un panneau pour insérer un graphique.
private Panneau pan = new Panneau();
//Création d'un conteneur.
private JPanel container = new JPanel();
//Ajout d'un JPanel pour inclure la box afin de la positionner.
private JPanel jpl = new JPanel();
//Creation de boutons.
private JButton btn1 = new JButton("Ouvrir");
private JButton btn2 = new JButton("Copier");
private JButton btn3 = new JButton("Effacer");
//Création d'une box pour positionner nos boutons verticalement.
Box panneauBouton = Box.createVerticalBox();
//Ajout d'une barre de menu.
private JMenuBar menuBar = new JMenuBar();
//Ajout d'un menu.
private JMenu ficher = new JMenu("Ficher"),
aPropos = new JMenu("À propos");
private JMenuItem quitter = new JMenuItem("Quitter"),
aProposItem = new JMenuItem("Lisez-moi");
public Fenetre(){
//Création de la fenêtre.
this.setTitle("Logiciel");
this.setSize(800, 500);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//On rend la fenêtre visible.
this.setVisible(true);
//Redimension de la box.
panneauBouton.setPreferredSize(new Dimension(360, 400));
// Redimension des boutons.
btn1.setMaximumSize(new Dimension(200, 30));
btn1.setAlignmentX(Component.CENTER_ALIGNMENT);
btn2.setMaximumSize(new Dimension(200, 30));
btn2.setAlignmentX(Component.CENTER_ALIGNMENT);
btn3.setMaximumSize(new Dimension(200, 30));
btn3.setAlignmentX(Component.CENTER_ALIGNMENT);
//Position du JPanel
jpl.setBounds(20, 20, 360, 400);
//Ajout des JPanel dans le conteneur
container.add(jpl);
container.setLayout(new BorderLayout());
container.add(pan, BorderLayout.CENTER);
this.setContentPane(container);
this.initMenu();
}
private void initMenu(){
//Menu ficher
ficher.add(quitter);
//Pour quitter l'application
quitter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
ficher.add(quitter);
//Menu À propos
aPropos.add(aProposItem);
//Ajout des menus dans la barre de menus
menuBar.add(ficher);
menuBar.add(aPropos);
//Ajout de la barre de menus sur la fenêtre
this.setJMenuBar(menuBar);
panneauBouton.add(Box.createVerticalStrut(125));
panneauBouton.add(btn1);
panneauBouton.add(Box.createVerticalStrut(25));
panneauBouton.add(btn2);
panneauBouton.add(Box.createVerticalStrut(25));
panneauBouton.add(btn3);
jpl.add(panneauBouton, BorderLayout.WEST);
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
showOpenFileDialog();
}
});
}
private void showOpenFileDialog() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
fileChooser.setAcceptAllFileFilterUsed(true);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());
}
}
}
Merci de me répondre rapidement, j'ai omis d'écrire que je suis débutant et que j'ai peut-être mal exprimé mon problème. il y a une interface graphique et un bouton "ouvrir", quand je clique sur ce bouton une boite de dialogue JFileChooser s'ouvre et je sélectionne un fichier image et je voudrai que l'image s'affiche dans le contexte graphique. L'utilisateur doit pouvoir ouvrir des fichiers sur son dd.
Dans ta classe Panneau, à la place de "Image.jpg", il faut mettre juste le chemin absolu vers l'image donné par le JFileChooser (dialog.getSelectedFile().getAbsolutePath()). Pas besoin d'utiliser le reste du code du coup (j'avais pas vu que tu avais déjà un panel qui affichait une image).
Bon j'ai l'impression que tu vas un peu trop vite en besogne
Je te conseille d'abord d'afficher une image proprement dans un panel. Puis ensuite d'essayer de changer l'image de ce panel avec un simple bouton (quand tu cliques, ça change d'image). Tout ça en n'utilisant pas de chemin absolu gravé dans ton programme (pas de : "C:/Users/PASCAL ET VIVIANE/Pictures/gaya/gaya 001.jpg"). Enfin, essaies de récupérer ton image via un JFileChooser. Parce qu'il me semble que tu ne comprends pas ce que tu fais. Avec le code que j'ai donné, si tu as compris le swing et un peu java tu peux t'en sortir.
Ok, donc je vais créer un nouveau projet avec une fenêtre, un JPanel et un bouton plus le code que tu m'a donné. Il est vrai que m'a logique n'est peut-être pas celle de java. Java n'est pas si facile a appréhender en tant qu'autodidacte. Merci pour tes conseil et je vais essayer d'arriver à un résultat. je te tiens au courant dès possible.
J'ai affiché une image dans une fenêtre puis à l'aide d'un bouton j'ai fait apparaître une image après le clic du bouton. Sur le net, je ne trouve pas de sujet qui traite la façon de changer d'image à chaque clic du bouton (une piste peut-être ?). Sachant que l'image est à la racine du projet. Je vais continuer à chercher.
Mettons que tu aies 2 images à la racine du projet.
tu ferais un truc du genre :
class MyImagePanel extends JPanel{
private String cheminDeLImage;
public MyImagePanel(String chemin){
this.cheminDeLImage = chemin;
}
@Override
public void paintComponent(Graphics g){
try {
img = ImageIO.read(new File(this.cheminDeLImage));
g.drawImage(img, 360, 380, this);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Fenetre extends JFrame implements ActionListener{
private String chemin;
public Fenetre(){
//Création de la fenêtre.
this.setTitle("Logiciel");
this.setPreferredSize(800, 500);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//On rend la fenêtre visible.
this.setVisible(true);
chemin = "images/image1.jpg";
//Redimension de la box.
this.setLayout(new BorderLayout());
JButton jb = new JButton("changer l'image");
jb.addActionListener(this);
this.add(jb, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e) {
//Attention ici je ne teste pas quel bouton est appelé. Dans le cas de plusieurs boutons, faire le test.
//on teste si le chemin est égal à une image ou une autre et on change
if(this.chemin.equals("images/image1.jpg")){
this.chemin = "images/image2.jpg";
}
else{
this.chemin = "images/image1.jpg";
}
this.add(new MyImagePanel(this.chemin), BorderLayout.CENTER); // on ajoute le panel au centre
//Attention à tester s'il existe déjà un panel dans le centre du layout, et à l'enlever si besoin
//on redessine la frame
this.repaint();
this.revalidate();
}
}
C'est vraiment grosso modo, dis moi si tu ne comprends pas tout!
Je t'ai expédié un message hier mais j'ai du faire une mauvaise manip. Bref, c'est super ton code mais je n'ai pas le résultat escompté. J'ai surement mal reconstruit le programme.En tout cas quand je raisonnerai de cette façon, j'en serai très heureux. Je comprend ce code. je mets les 3 classes et peux-tu m'expliquer les erreurs que j'ai commis.
Voici les codes:
MainImage
package imagePanel;
public class MainImage {
public static void main(String[] args) {
@SuppressWarnings("unused")
Fenetre fen = new Fenetre();
}
}
Fenêtre
package imagePanel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Fenetre extends JFrame implements ActionListener{
String chemin;
public Fenetre(){
//Création de la fenêtre.
this.setTitle("Logiciel");
this.setSize(800, 500);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//On rend la fenêtre visible.
this.setVisible(true);
chemin = "images/IMGP0866.jpg";
//Redimension de la box.
this.setLayout(new BorderLayout());
JButton jb = new JButton("changer l'image");
jb.addActionListener(this);
this.add(jb, BorderLayout.NORTH);
}
public void actionPerformed(ActionEvent e) {
//Attention ici je ne teste pas quel bouton est appelé. Dans le cas de plusieurs boutons, faire le test.
}
}
MyImagePanel
package imagePanel;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
@SuppressWarnings("serial")
class MyImagePanel extends JPanel{
private String cheminDeLImage;
public MyImagePanel(String chemin){
this.cheminDeLImage = chemin;
}
public void paintComponent(Graphics g){
try {
BufferedImage img = ImageIO.read(new File(this.cheminDeLImage));
g.drawImage(img, 360, 380, this);
} catch (IOException e) {
e.printStackTrace();
}
//on teste si le chemin est égal à une image ou une autre et on change
if(this.cheminDeLImage.equals("images/IMGP0866.jpg")){
this.cheminDeLImage = "images/IMGP0870.jpg";
}
else{
this.cheminDeLImage = "images/IMGP0866.jpg";
}
this.add(new MyImagePanel(this.cheminDeLImage), BorderLayout.CENTER); // on ajoute le panel au centre
//Attention à tester s'il existe déjà un panel dans le centre du layout, et à l'enlever si besoin
//on redessine la frame
this.repaint();
this.revalidate();
}
}
Tu as un truc pas trop mal! Tu oublies cependant de lier ton bouton à l'ajout de ton panel! Du coup ton bouton ne fait rien. Que fait ton programme actuellement?
(indice, il faut que tu mettes le JPanel dans ta classe fenêtre en attibut de classe)
encore une fois le message s'est envolé. quand j'exécute le programme , la fenêtre s'ouvre avec le bouton mais pas d'image. Qu'entends-tu par lier le bouton à l'ajout du panel ? (je ne connais peut-être pas). j'ai aussi instancié JPanel dans la fenêtre
Dans le code mis ci-dessus, tu n'ajoutes pas le panel à la fenetre.
Sinon quand je parle de lier le bouton à l'ajout du panel, je veux dire qu'il faut bien écrire dans ton programme l'action que va faire ton bouton quand tu vas cliquer dessus! Connais-tu les ActionListener?
Yep, pour que quand tu cliques sur le bouton ça fasse une action (donc n'oublie pas de mettre le panel en attribut de classe pour pouvoir agir dessus avec le ActionListener)!
Bon, nouvelle erreur sur string chemin; Je te remet le code .
package imagePanel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class Fenetre extends JFrame implements ActionListener{
String chemin ;
this.add(new MyImagePanel(this.chemin), BorderLayout.CENTER);
// on ajoute le panel au centre
//Attention à tester s'il existe déjà un panel dans le centre du layout, et à l'enlever si besoin
public Fenetre(){
//Création de la fenêtre.
this.setTitle("Logiciel");
this.setSize(800, 500);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//On rend la fenêtre visible.
this.setVisible(true);
chemin = "images/IMGP0866.jpg";
this.setLayout(new BorderLayout());
JButton jb = new JButton("changer l'image");
this.add(jb, BorderLayout.NORTH);
jb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource()== jb){
//Attention ici je ne teste pas quel bouton est appelé. Dans le cas de plusieurs boutons, faire le test.
}
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Stub de la méthode généré automatiquement
}
package imagePanel;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
@SuppressWarnings("serial")
class MyImagePanel extends JPanel{
private String cheminDeLImage;
public MyImagePanel(String chemin){
this.cheminDeLImage = chemin;
}
public void paintComponent(Graphics g){
try {
BufferedImage img = ImageIO.read(new File(this.cheminDeLImage));
g.drawImage(img, 360, 380, this);
} catch (IOException e) {
e.printStackTrace();
}
//on teste si le chemin est égal à une image ou une autre et on change
if(this.cheminDeLImage.equals("images/IMGP0866.jpg")){
this.cheminDeLImage = "images/IMGP0870.jpg";
}
else{
this.cheminDeLImage = "images/IMGP0866.jpg";
}
//on redessine la frame
this.repaint();
this.revalidate();
}
}
printStackTrace:
Exception in thread "main" java.lang.Error: Problème de compilation non résolu :
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testocfilechooser;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author Olivier
*/
public class MainFrame extends JFrame implements ActionListener {
//On met le panel central en paramètre pour pouvoir le supprimer après
private MyImagePanel myImagePanel;
public MainFrame() {
this.setLayout(new BorderLayout());
JButton jb = new JButton("changer l'image");
jb.addActionListener(this);
this.add(jb, BorderLayout.NORTH);
this.setPreferredSize(new Dimension(400, 300));
this.pack();
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
//Personnellement je trouve plus facile à lire de mettre un seul ActionListener comme ceci à des fins de test.
//Néanmoins en réalité il faut faire autrement (un Listener par composant en général
JButton src = (JButton) e.getSource();
if (src.getText().equals("changer l'image")) {
//on crée un JFileChooser sur le repertoire courant
JFileChooser dialogue = new JFileChooser(".");
//on l'affiche
dialogue.showOpenDialog(null);
//on vérifie qu'on a bien récupéré quelque chose
String fichierChoisi = dialogue.getSelectedFile() != null ? dialogue.getSelectedFile().getAbsolutePath() : "err";
//si on a bien récupéré quelque chose, on supprime le panel précédent s'il existe, et on affiche un nouveau panel
if(!fichierChoisi.equals("err")){
regeneratePanel(new MyImagePanel(fichierChoisi));
}
}
}
private void flush() {
if (this.myImagePanel != null) {
this.remove(this.myImagePanel);
this.myImagePanel = null;
}
}
private void regeneratePanel(MyImagePanel jp) {
flush();
this.myImagePanel = jp;
this.add(this.myImagePanel, BorderLayout.CENTER);
//ici revalidate et repaint sont importants, sinon l'image ne s'affiche que lorsque la fenetre sera redimensionnée
this.revalidate();
this.repaint();
this.pack();
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testocfilechooser;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
*
* @author Olivier
*/
public class MyImagePanel extends JPanel{
private String cheminDeLImage;
public MyImagePanel(String cheminDeLImage){
this.cheminDeLImage = cheminDeLImage;
}
@Override
public void paintComponent(Graphics g){
try {
BufferedImage img = ImageIO.read(new File(this.cheminDeLImage));
g.drawImage(img, 0, 0, this);
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testocfilechooser;
/**
*
* @author Olivier
*/
public class TestOCFileChooser {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MainFrame mf = new MainFrame();
}
}
N'hésite pas à poser des questions si tu le souhaites!
2/ flush permet de dégager le panel du centre dans tous les cas : s'il existe il est dégagé, sinon on ne fait rien.
3/ ça signifie qu'on va passer en paramètre un String qui s'appelle cheminDeLImage et que l'on va attribuer à l'attribut de classe qui s'appelle cheminDeLImage (ligne 20 de MyImagePanel). On utilise this.cheminDeLImage pour signifier qu'on parle de l'attribut de classe cheminDeLImage et non pas du string CheminDeLImage qui est en paramètre du constructeur.
C'est comme si tu crées un projet avec sa classe donc un onglet s'ouvre avec le nom de la classe et là tu peux codé. C'est ouvrir l'éditeur sans projet et sans classe et que tu puisses codé quand même. par exemple tu es dans une discussion et tu veux montrer un bout de code sans pour autant crée de classe, je dirais tu codes à la volée à l'instant "T"et tu le diffuse dans la discussion instantanément. Un peu comme une classe vide. J'espère que tu me comprendras.
Par contre je n'ai pas compris le panel.
Puis-je me permettre de rajouter quelques commentaires dans le code ?
De plus c'est exactement ce que je recherchais pour avancer dans mon projet (1er post) et j'ai aussi acheté le livre d'Anne Tasso "Java premier langage". Connais-tu ce livre?
C'est comme si tu crées un projet avec sa classe donc un onglet s'ouvre avec le nom de la classe et là tu peux codé. C'est ouvrir l'éditeur sans projet et sans classe et que tu puisses codé quand même. par exemple tu es dans une discussion et tu veux montrer un bout de code sans pour autant crée de classe, je dirais tu codes à la volée à l'instant "T"et tu le diffuse dans la discussion instantanément. Un peu comme une classe vide. J'espère que tu me comprendras.
Tres bonne question du coup, mais je pense que ce n'est pas possible x)
Mais tu peux toujours avoir un projet "BlocNote" avec juste une classe et coder a la va vite dedans pour voir ce qui peut marcher (et avoir une bonne indentation)
C'est comme si tu crées un projet avec sa classe donc un onglet s'ouvre avec le nom de la classe et là tu peux codé. C'est ouvrir l'éditeur sans projet et sans classe et que tu puisses codé quand même. par exemple tu es dans une discussion et tu veux montrer un bout de code sans pour autant crée de classe, je dirais tu codes à la volée à l'instant "T"et tu le diffuse dans la discussion instantanément. Un peu comme une classe vide. J'espère que tu me comprendras.
Par contre je n'ai pas compris le panel.
Puis-je me permettre de rajouter quelques commentaires dans le code ?
De plus c'est exactement ce que je recherchais pour avancer dans mon projet (1er post) et j'ai aussi acheté le livre d'Anne Tasso "Java premier langage". Connais-tu ce livre?
Alors pour Eclipse je en sais pas donc je ne pourrais pas te répondre.
Que n'as-tu pas compris pour le panel? à quoi il sert? son fonctionnement?
pour le panel, c'est le fait de le mettre en central et de le supprimer, en gros c'est son fonctionnement.
//On met le panel central en paramètre pour pouvoir le supprimer après
private MyImagePanel myImagePanel;
//si on a bien récupéré quelque chose, on supprime le panel précédent s'il existe, et on affiche un nouveau panel
if(!fichierChoisi.equals("err")){
regeneratePanel(new MyImagePanel(fichierChoisi));
Je pense que ("err") = erreur ?
Quant est-ce-que l'on doit mettre "statement" ( });)?
Bon je commente le code et je reposte pour validation
/*
de * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testocfilechooser;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
/**
*
* @author Olivier
*/
public class MainFrame extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -7979708786705955181L;
//On met le panel central en paramètre pour pouvoir le supprimer après.
//On passe en paramètre un String qui s'appelle cheminDeLImage et
//que l'on va attribuer à l'attribut de classe.
private MyImagePanel myImagePanel;
public MainFrame() {
this.setLayout(new BorderLayout());
JButton jb = new JButton("changer l'image");
jb.addActionListener(this);
this.add(jb, BorderLayout.NORTH);
this.setPreferredSize(new Dimension(400, 300));
this.pack();
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
//Personnellement je trouve plus facile à lire de mettre un seul ActionListener comme ceci à des fins de test.
//Néanmoins en réalité il faut faire autrement (un Listener par composant en général
JButton src = (JButton) e.getSource();
if (src.getText().equals("changer l'image")) {
//on crée un JFileChooser sur le repertoire courant
JFileChooser dialogue = new JFileChooser(".");
//on l'affiche
dialogue.showOpenDialog(null);
//on vérifie qu'on a bien récupéré quelque chose
String fichierChoisi = dialogue.getSelectedFile() != null ? dialogue.getSelectedFile().getAbsolutePath() : "err";
//si on a bien récupéré quelque chose, on supprime le panel précédent s'il existe et on affiche un nouveau panel
if(!fichierChoisi.equals("err")){
regeneratePanel(new MyImagePanel(fichierChoisi));
}
}
}
// flush(flux)permet de supprimer le panel du centre dans tous les cas :
//s'il existe il est supprimer, sinon on ne fait rien.
private void flush() {
if (this.myImagePanel != null) {
this.remove(this.myImagePanel);
this.myImagePanel = null;
}
}
//On régénere le panel
private void regeneratePanel(MyImagePanel jp) {
flush();
this.myImagePanel = jp;
this.add(this.myImagePanel, BorderLayout.CENTER);
//ici revalidate et repaint sont importants, sinon l'image ne s'affiche que lorsque la fenêtre sera redimensionnée
this.revalidate();
this.repaint();
this.pack();
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package testocfilechooser;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
*
* @author Olivier
*/
public class MyImagePanel extends JPanel{
private static final long serialVersionUID = 1L;
private String cheminDeLImage;
public MyImagePanel(String cheminDeLImage){
//Signifie qu'on parle de l'attribut de classe cheminDeLImage et
//Non pas du string CheminDeLImage qui est en paramètre du constructeur.
this.cheminDeLImage = cheminDeLImage;
}
@Override
public void paintComponent(Graphics g){
try {
//On stocke dans le tampon l'image et on la dessine.
BufferedImage img = ImageIO.read(new File(this.cheminDeLImage));
g.drawImage(img, 0, 0, this);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Au faîte, as-tu une bonne opinion de ce livre?
Mieux vaut tard que jamais.
boite de dialogue JFileChooser
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
sous la la classe fenêtre ou j'ai déclarais JPanel. Je connais un peu