IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTable] s'efface si je crée la fonction paint()


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Par défaut [JTable] s'efface si je crée la fonction paint()
    Bonjour,

    Je souhaiterais faire une JTable, et qu'une image s'affiche lorsqu'on clique sur une cellule.
    Voici mon code :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    public class DucksManager extends Applet{
     
    	private Image image;
     
    	private JTable table = null;
    	DefaultTableModel modele = null;
     
    	public void init() {
     
    		this.setSize(new Dimension(500,400));
    		this.add(getTable());
    		this.add(getScroll());
    	}
     
    	private JScrollPane getScroll() {
    		if (scroll == null) {
    			scroll = new JScrollPane(table,
    					JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
    				      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    		}
    		scroll.setVisible(true);
    		return scroll;
    	}
    	private JTable getTable() {
    		if (table == null) {
    			table = new JTable();
    			modele = new DefaultTableModel();
    			modele.setColumnIdentifiers(new String[]{"Magazine","Numéro","Etat","Date acquisition"});
    			table.setModel(modele);
    			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    			table.setSize(new Dimension(187, 185));
    			table.addMouseListener(new java.awt.event.MouseListener() {
    				public void mouseClicked(java.awt.event.MouseEvent e) {
    					System.out.println("Clic");
    					int num_clique=table.getSelectedRow();
    					try {
    						image=getImage(new URL("http://l_adresse.org/"+new Integer(num_clique).toString()+".jpg"));
    					} catch (MalformedURLException e1) {
    						e1.printStackTrace();
    					}
    					repaint();
    				}
    				public void mousePressed(java.awt.event.MouseEvent e) {
    				}
    				public void mouseReleased(java.awt.event.MouseEvent e) {
    				}
    				public void mouseEntered(java.awt.event.MouseEvent e) {
    				}
    				public void mouseExited(java.awt.event.MouseEvent e) {
    				}
    			});
    			remplir_table();
    			table.setVisible(true);
     
    		}
    		return table;
    	}
     
    	void remplir_table() {
    		modele.addRow(new String[] {"mag1","num35","OK","today"});
    		repaint();
    	}
    	public void paint (Graphics g) {
    		if (image != null)
    			g.drawImage(image, 0, 0, this);
    	}
    }
    Je ne sais pas trop pourquoi, mais quand au départ j'affichais seulement la JTable tout allait bien, et maintenant que j'ai ajouté le paint() la JTable s'affiche seulement si je clique là où elle est censée être.

    Des idées ?

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    je ne connais pas bien la classe Applet mais est-ce vraiment la méthode paint qu'il te faut surcharger ?

  3. #3
    Membre confirmé
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Par défaut
    Salut, et merci pour ta réponse,

    Ta réponse m'a intrigué : ça me semblait évident qu'il fallait utilisé paint même pour les applets. Cependant je me suis souvenu que souvent la fonction "run" était utilisée pour les applets. J'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void run (Graphics g) {
    		if (image != null)
    			g.drawImage(image, 0, 0, this);
    }
    Et...Ca marche ? Ben oui ça marche ! Comment est-ce que c'est possible ? Ca veut dire qu'à chaque fois que je ferai repaint() la fonction run s'exécutera ? Ca me semble bizarre !

  4. #4
    Membre confirmé
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Par défaut
    Rectification : en fait la JTable s'affiche bien, mais par contre le run ne s'exécute jamais...
    Que faire alors ? Je dois quand même pas être le premier à vouloir afficher une JTable et une image en même temps quand même !!

  5. #5
    Membre confirmé
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Par défaut
    OK, j'ai trouvé tout seul
    J'ai regardé sur un ancien code, et en fait c'est ça qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void paint(Graphics g) {
    	super.paint(g);
    	if (image != null)
    		g.drawImage(image, 0, 0, this);
    }
    Donc en fait il fallait juste ajouter super.paint(g), je sais pas trop pourquoi (peut-être pour "peindre" l'applet avant de peindre ses composants ?)

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dans ton cas il manquait une appel à super.painit dans ta redéfinition de la méthode paint.

    La façon dont tu avait redéfini paint faisait que l'applet ne dessinait que l'image (et plus les composants contenus comme le fait normalement la méthode paint)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] crée une fonction date
    Par beaf05 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/01/2011, 11h23
  2. [MySQL] crée une fonction pour un select count
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/07/2010, 01h12
  3. effacer n clip crée avec movieClipLoader
    Par rawkus dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 14/01/2008, 16h38
  4. Crée des fonctions du type => http://
    Par kazylax dans le forum VB.NET
    Réponses: 5
    Dernier message: 12/07/2007, 15h48
  5. effacer des composants crée dynamiquement
    Par forzaxelah dans le forum Delphi
    Réponses: 7
    Dernier message: 29/06/2006, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo