Problème d'affichage d'un dessin

GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005 - 19 sept. 2005 à 16:10
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005 - 29 sept. 2005 à 20:36
Bonjour à tous,

Dans une classe je dessine une fenêtre comportant les éléments d'un menu. Une classe hérite de la classe menu. Dans cette deuxième classe, je dispose de différentes composants disposés avec un GridBagLayout et un GridBagConstraints. Ces composants sont des Choice, JTextField. Ces derniers s'affichent très bien. Toutefois, quand je veux insérer un dessin au format Jpeg ou Gif, le dessin ne s'affiche pas pourtant, la fonction paintComponent(g) est appelée.
Donc, est-il impossible de dessiner une image via un héritage ?

Merci par avance.

Très cordialement,
Guy

9 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 sept. 2005 à 18:41
ouai dis comme ca c est sur ;o) montre donc le code de ton paintComponent... ;o)

GodConan
0
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005
24 sept. 2005 à 14:11
Bonjour,

Ci-joint, le code relatif à mon paintComponent.
Merci.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class RechercherDessin extends JPanel
{
private String dessin;
private Image image;


public RechercherDessin(String _dessin)
{
dessin=_dessin;


MediaTracker tracker = new MediaTracker(this);
image=Toolkit.getDefaultToolkit().getImage(dessin);


tracker.addImage(image,0);
try
{
tracker.waitForID(0);
}
catch(InterruptedException exception) {}
}


public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image,750,30, this);
}
}
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 sept. 2005 à 21:40
evidement c est la bonne methode ...
mais il fau penser a dire a ton component de se rafraichir .. (repaint())

+++

GodConan
0
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005
25 sept. 2005 à 12:51
Bonjour,
Je vous remercie pour votre proposition de solution avec la procédure repaint().


J’ai implémenté cette dernière dans la procédure paintComponent(). Cette solution ne me permet toujours pas d’afficher le dessin désiré. Il me semble qu’on utilise la procédure repaint() afin de forcer le programme à redessiner la fenêtre (rafraîchir). Dans mon cas, le programme passe dans la procédure paintComponent().


J’ai une classe qui construit un menu (Fichier,…). D’autres en héritent afin d’éviter d’écrire à chaque fois le menu. Si je demande le dessin sur la fenêtre directement qui crée le menu, alors mon dessin s’affiche. En revanche, si je demande l’affichage du dessin via une autre fenêtre, qui en réalité est celui du menu par héritage, alors le dessin ne s’affiche pas bien que la procédure paintComponent(). J’ai d’autres composants (Label, JtextField…) construits avec un GridBagLayout, GridBagConstraints et Panel qui s’affichent sans aucun problème.


Donc, le problème proviendrait de l’héritage. Mais pourquoi les autres composants s’affichent ?


Merci par avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 sept. 2005 à 13:22
il ne faut surtou pas appeler reapint ds paint ;o) car la tu va avoir un stack overflow.... ;o)

fait dc voir ton code .... ton discourt n est pas tes claire ...

++

GodConan
0
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005
25 sept. 2005 à 17:45
Merci pour tout.
Ci-joint un extrait de code relatif à mon problème.

//Classe ListeEtudiants hérite de la classe CadreMain qui construit le menu
public class ListeEtudiants extends CadreMain implements MouseListener
{
private Container container=null;
private GridBagLayout layout = new GridBagLayout();;
private GridBagConstraints contraintes = new GridBagConstraints();
private JPanel panelInfoEtudiant = new JPanel();


public ListeEtudiants()
{
container = getContentPane();
container.setLayout(layout);


//Titre de la fenêtre pour la classe ListeEtudiants
setTitle("MODULE LISTE DES ETUDIANTS");


//Cadre dans lequel devrait être dessiner une photo
Border cadrePhoto = rderFactory.createTitledBorder(etched,"Photo");
panelPhoto.setBorder(cadrePhoto);


panelPhoto.setLayout(new GridBagLayout());
}


public ResultSet getTable(String table)
{
return getQuery("SELECT * FROM " + table + " ORDER BY NomET ASC");
}


//Fonction qui interroge une base de données Access afin de récupérer le nom du dessin
public ResultSet getQuery(String query) //Retourne le résultat de la requête
{
String retourRequete=null;


if(connected)
{
try
{
ResultatRequete=Requete.executeQuery(query);
}
catch (SQLException e)
{
System.out.println(e.toString());
System.out.println("Requete non valide");
}


try
{
ResultatRequete.next();
photoEtudiant=ResultatRequete.getString(21);
if(photoEtudiant!=null)
{
contraintes.fill=GridBagConstraints.NONE;
contraintes.anchor=GridBagConstraints.WEST;
contraintes.weightx=0;
contraintes.weighty=0;
contraintes.insets.left=0;
contraintes.insets.right=0;
contraintes.insets.top=0;
contraintes.insets.bottom=0;
contraintes.ipadx=0;
contraintes.ipady=0;
contraintes.gridx=0;//Positionnement colonne
contraintes.gridy=0;//Positionnement ligne
contraintes.gridwidth=2;//Nb colonne occupée
contraintes.gridheight=3;//Nb ligne occupée


panelPhoto.add(new Photo(photoEtudiant));
container.add(panelPhoto);
}
}
}
}
}


//Classe chargée de dessiner la photo récupérée dans la base
class Photo extends JPanel
{
private Image photo=null;
private String nomPhoto=null;


public Photo(String _nomPhoto)
{
nomPhoto=_nomPhoto;


photo = Toolkit.getDefaultToolkit().getImage(nomPhoto);
MediaTracker trackerPhoto = new MediaTracker(this);
trackerPhoto.addImage(photo,0);
try
{
trackerPhoto.waitForID(0);
}
catch(InterruptedException exception)
{
System.out.println("Echec du pisteur");
System.exit(0);
}
}


public void paintComponent(Graphics g)
{
super. paintComponent (g);
g.drawImage(photo,700,0,null);
}
}
0
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005
27 sept. 2005 à 08:04
J'ai trouvé la solution partielle à mon problème d'affichage. Mon dessin ne s'affichait pas car la dimenssion de ce dernier est supérieure à la place réservée par le composant. Donc dans le paintComposant, j'ai formater la taille du dessin afin qu'il puisse entrer dans le composant.
Problème maintenant, j'ai un tout petit dessin. Donc comment augmenter la taille d'un composant ?

Merci
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
27 sept. 2005 à 18:46
et bien normalement c est le layout qui s en charge
un BorderLayout par exemple fait coller le composant sur les bord du contenair
autrement tu peut aussi definir une preferedSize a ton composant ...

pour le drawImage tu peut aussi utiliser la methode avec definition de la taille de l image se qui a pour consequence de l étirer.. ;o)

++

GL
GodConan
0
GuyJava Messages postés 28 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 16 novembre 2005
29 sept. 2005 à 20:36
Bonjour,

Merci pour la proposition de solution.
J'ai trouvé la raison de l'affichage minuscule de mon dessin. J'utilise un objet GridBagConstraints. En conséquence, il fallait attribuer une valeur en conséquence à contraintes.ipadx=150;
contraintes.ipady=150;
afin de réserver la place dessin au dessin. Or, ces variables étaient à 0.

Toutefois, j'ai encore un problème avec l'affichage. Je dois faire apparaître plusieurs dessins successivement. Seul le premier apparaît. Il s'agit donc d’un problème de rafraîchissement très certainement. Où placer la procédure repaint() afin que l'opération de rafraîchissement se fasse ?

Merci
GuyJava
0
Rejoignez-nous