Écrit par : pilaau 13 Apr 2014, 23:05
Bonjour,
Je suis nouveau, c'est mon premier post.
Voici ci-après le code "CvisionneuseImages.java" d'un prog (il n'est pas de moi)
Code
[color="#FF8C00"][code]
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CVisionneuseImages extends JFrame {
static CVisionneuseImages m_fenetre;
String m_nomFichier; // Nom du fichier
Image m_imageAct; // Reference l'image actuelle
CCanvasImage m_affichageImage; // JPanel pour afficher l'image
int m_Xpos,m_Ypos; // Nouvelle position o˘ sera
// affichÈ le coin supÈrieur
// gauche de l'image
int m_image_x1,m_image_y1; // Delimitation actuelle
int m_image_x2,m_image_y2; // de l'image
int m_hauteurImage,m_largeurImage; // Hauteur et largeur en pixels
// Gestion des Èvenements
class CMonEcouteurAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
String Label;
Label = e.getActionCommand();
if(Label.equals("Quitter le programme"))
System.exit(0);
if(Label.equals("Ouvrir image"))
ouvrirImages();
}
}
// Creation d'un panneau (utilise pour l'affichage) et
// d'une barre de menu dans le constructeur
public CVisionneuseImages() {
super();
m_Xpos = m_Ypos = 20; // Position de depart : en haut a gauche
m_image_x1 = m_image_x2 = m_image_y1 = m_image_y2 = 0;
// Pas d'image ouverte au demarrage
m_nomFichier = null;
m_imageAct = null;
// Choix du gestionnaire de positionnement
setLayout(new FlowLayout());
// Derivation du canvas a partir de JPanel
m_affichageImage = new CCanvasImage();
add(m_affichageImage);
// Ajout d'une barre de menu a la fenetre
JMenuBar barreMenu = new JMenuBar();
setJMenuBar(barreMenu);
// Creation des options du menu
JMenu menu1 = new JMenu("Fichier");
JMenuItem item1 = new JMenuItem("Ouvrir image");
item1.addActionListener(new CMonEcouteurAction());
JMenuItem item2 = new JMenuItem("Quitter le programme");
item2.addActionListener(new CMonEcouteurAction());
menu1.add(item1);
menu1.add(item2);
barreMenu.add(menu1);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
// Ouverture d'un fichier image
public void ouvrirImages(){
FileDialog d = new FileDialog(this,"Ouvrir image...",
FileDialog.LOAD);
d.setVisible(true);
m_nomFichier = d.getFile();
// Si l'utilisateur ne selectionne
// pas d'image, null est retourne.
// Ne rien faire.
if(m_nomFichier == null)
return;
// Ouverture de l'image
ImageIcon tmp = new ImageIcon(m_nomFichier);
m_imageAct = tmp.getImage();
// Transmission des coordonnees de l'image
m_largeurImage = m_imageAct.getWidth(m_affichageImage);
m_hauteurImage = m_imageAct.getHeight(m_affichageImage);
m_image_x1 = m_Xpos;
m_image_y1 = m_Ypos;
m_image_x2 = m_image_x1 + m_largeurImage;
m_image_y2 = m_image_y1 + m_hauteurImage;
m_affichageImage.repaint();
}
public static void main(String[] args) {
m_fenetre = new CVisionneuseImages();
m_fenetre.setSize(400,400);
m_fenetre.pack();
m_fenetre.setVisible(true);
}
// Cette classe sert a ouvrir et a manipuler les images
class CCanvasImage extends JPanel {
// Redessine le panneau
public void paintComponent(Graphics g) {
// Si une image est ouverte, l'afficher
if(m_imageAct != null)
g.drawImage(m_imageAct,m_Xpos,m_Ypos,this);
}
public Dimension getMinimumSize() {
return m_fenetre.getSize();
}
public Dimension getPreferredSize() {
return getMinimumSize();
}
}
}[/color]
Je m'initie à ce langage.
Le prog lancé me demande une image à ouvrir, elle doit être dans le même répertoire que le prog.
Ce qui se passe c'est que l'image étant affichée, je peux toujours utiliser le menu ouvrir une image, mais cette image remplacera la précédente.
Que dois-je faire pour compartimenter le panneau et que chaque nouvelle image se place à coté de la précédente ?
Merci, bien sûr,
Ce serait pour moi une manière de comprendre "comment gérer les panneaux", c'est pas évident dans la doc, me semble t'il !
Code
[color="#FF8C00"]
public void paintComponent(Graphics g)
[/color]
le paneau se redessine et je perds l'image d'avant!
Comment faire autrement
Pilaau
Écrit par : Jaypee 16 Apr 2014, 14:59
Je ne suis pas surpris que ce sujet suscite si peu d'attention.
L'approche que tu prends est un peu marginale :
- Tout faire en partant de zéro.
- En utilisant un exemple médiocre : Pas très bien structuré, ne respectant pas les conventions les plus élémentaires.
Peut-être que si tu expliquais ta motivation, tu attirerais davantage l'attention des habitués de ce forum.
- Es-tu débutant en programmation ?
- Es-tu débutant en Java ?
Qu'est-ce qui motive ton choix d'outils ? (Java, Swing, une appli qui ne tourne pas sur le Web...)
L'idée d'une meilleure approche pourrait être d'utiliser une plateforme de "client riche", qui a déjà beaucoup de fonctions, et où on ne fait qu'affiner certaines fonctions selon ses souhaits propres. Cet exemple vient directement de chez Oracle (le propriétaire de Java): http://download.oracle.com/otndocs/products/javafx/2/samples/Ensemble/index.html#SAMPLES
J'espère que ça ne t'impressionne pas toutes ces questions
J-P