Mettre à jour la présentation graphique (ajouter un tableau) [Résolu]

Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
- - Dernière réponse : Dominique49
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
- 29 avril 2011 à 16:32
Salut,
Voilà, je viens de faire une boite de dialogue perso qui me permet d'importer des tableaux CSV ...
Donc le tableau est bien générer, ajouter au ContentPane etc.
Très bien, sauf que le JPanel ne se met pas à jour !
Par contre, si l'on redimensionne la fenêtre, ça marche ...
Et j'ai lu quelque part qu'au redimensionnement, la méthode repaint() est appelée ...
J'ai donc essayer d'appeler repaint sur le JPanel d'abord, puis comme ça marchait pas sur this (this.repaint()).
J'ai même essayé avec repaint(); tout court, mais ça ne marche pas mieux ...
Comment faire donc pour mettre à jour l'interface graphique d'une boîte de dialogue ...
J4ai déjà vu un exemple qui marchait avec repaint(), mais c'était sur une JFrame et non une JDialog ...
Merci d'avance.
Afficher la suite 

9 réponses

Meilleure réponse
3
Merci
La méthode repaint() dans la méthode paintComponent() ?
Ça peut être bien que tu indiques où tu as vu ça car je pense que l'exemple que tu as pris est mauvais. Si les deux méthodes sont du même objet ça risque de dysfonctionner car c'est la méthode repaint() qui appelle la méthode paintComponent. Donc avec ce que tu dis tu risques de partir dans une boucle infinie

Sinon pour la petite info, repaint() est appelée quand on modifie la fenêtre. Donc ce n'est pas uniquement valable pour le redimensionnement. Par exemple essaye de secouer ta fenêtre ça marchera.

Quand tu dis que ton JPanel ne se met pas à jour, les boutons restent toujours dessus c'est ça ?
Essaye d'utiliser ta méthode setLayout(new BorderLayout()); sur ton JPanel et pas sur this.

-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 193 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
En fait c'est le meme principe que tu sois dans une JFrame ou dans une JDialog.

Peux-tu poster le code ou tu utilises ton JPanel et tes autres composants qui seront inclus dans ta JDialog ? Ceci nous permettra de voir comment tu t'y prends et si tu as touche aux methodes repaint ou paintComponent.

As-tu essaye d'appeller la methode repaint() de ta JDialog ?

-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
Commenter la réponse de Utilisateur anonyme
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
0
Merci
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.AbstractTableModel;


public class importCSVDialog extends JDialog {
private int ok;

private Object result=null; 
public static final int ArrayListOfStringArray 1, ArrayListOfObjectArray 0;
private JButton open new JButton(" Ouvrir "), cancel new JButton(" Annuler "), select = new JButton(" Sélectionnez le fichier à importer ");
private JPanel container new JPanel(), buttons new JPanel();
private JFileChooser chooser = new JFileChooser();
private JModel model=null;

public importCSVDialog(JFrame parent, String title, boolean modal){
super(parent,title,modal);
this.setSize(550,270);
this.setLocationRelativeTo(null);
this.setResizable(true);
this.setLayout(new BorderLayout());
this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
initComponent();
this.setContentPane(container);
}

public int showCSVDialog(){
this.setVisible(true);
return ok;
}

public Object getResult() {
return result;
}

private void initComponent(){


select.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent arg0) {
        	 chooser.setDragEnabled(true);
        	 FileNameExtensionFilter filter1 = new FileNameExtensionFilter(
        		        "JPG & GIF Images", "jpg", "gif");
        	 FileNameExtensionFilter filter2 = new FileNameExtensionFilter(
        		        "Fichier csv", "csv");
        	 
        	 
        	 chooser.addChoosableFileFilter(filter1);
        	 chooser.addChoosableFileFilter(filter2);
        	 int file = chooser.showOpenDialog(null);
        	 
        	
        	 File myFile = chooser.getSelectedFile();
        	 if(file==0){
        	 System.out.println("Parcourir ... "+file+" -> "+myFile.getPath());
        	 initTable(myFile.getPath());
        	 }else{
        		 System.out.println("Importation annulée");
        	 }
         }
        });
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ok=0;
result=model.getResult();
setVisible(false);
}
});
cancel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ok=1;
setVisible(false);
}
});

buttons.add(open);
buttons.add(cancel);

container.add(select, BorderLayout.SOUTH);
container.add(buttons, BorderLayout.NORTH);
}
public void initTable(String fich){
 
 csvFile csv1 = new csvFile(fich);
 long startTime = System.currentTimeMillis();
  ArrayList<Object> out = csv1.getResult(csvFile.ArrayListOfObjectArray);
 long time = System.currentTimeMillis()-startTime;

 Object tab = new Object;
 int i=0;
 for(Object obj: out){
 	tab=obj;
 	i++;
 }
 Object tabs = {{"col1", "col2", "col3", "col4"}, {"item1", "item2", "item3", "item4"} , {"item1", "item2", "item3", "item4"}};
 String title = {"a", "b", "c", "d", "e", "F"};
 i=0;
 
 for (Object col: tab){
 int u=0;
 for(Object text: col)
 System.out.print(i+"-"+u+"   "+text+"\t");++u;
 System.out.print("\n");
 i++;
 }
 model = new JModel(tab, title);
 
 JTable tableau = new JTable(model);
this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
writeCSV wc = new writeCSV(tab);
String wcr = wc.getResult();
System.out.println(wcr);
repaint(); // C'est là le pb justement !!
System.out.println("affichage terminé en "+time+" milli-secondes ");
 }
class JModel extends AbstractTableModel{

private Object data;
private String title;
/**
 * Constructeur
 * @param data
 * @param title
 */
public JModel(Object data, String title){
this.data = data;
this.title = title;
}
public boolean isCellEditable(int row, int col){
return true;
}
/**
 * Retourne le nombre de colonnes
 */
public int getColumnCount() {
return this.title.length;
}

/**
 * Retourne le nombre de lignes
 */
public int getRowCount() {
return this.data.length;
}

/**
 * Retourne la valeur à l'emplacement spécifié
 */
public Object getValueAt(int row, int col){
System.out.println("x -> "+row+" y -> "+col);
try{
return this.data;
}catch(IndexOutOfBoundsException e){
System.out.println("Excpetion pour x ="+row+" et y = "+ col+"  Erreur corrigée. ");


return (Object)"";
}
}
public Object getResult(){
return this.data;
}

}
}


Voilà, je suppose que tout n'est pas utile là-dedans pour la résolution de se pb

Voilà, merci d'avance.

Mais tu m'y fait penser, dans l'exemple que j'ai vu, le repaint(); était dans une méthode paintComponent ...
Commenter la réponse de Dominique49
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
0
Merci
Désolé, ça marche pas non plus ...
Ah oui, une précision, le tableau qui doit s'afficher est plmus grand que la fenêtre.
Néanmoins, comme il y a un JScrollPane, ça devrait pas jouer ...
Commenter la réponse de Dominique49
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
0
Merci
Ah oui, pour l'exemple, j'ai été trop vite, la méthode n'était pas dans le paintComponent, mais ailleurs dans la classe ...
Faut-il que je précise un paintComponent ?

14 ans, apprend PHP/MySQL, Javascript/Ajax et Java.
Commenter la réponse de Dominique49
0
Merci
Tu as bien mis ton tableau dans un JScrollPane et ton JScrollPane au JPanel de ta fenêtre ?

-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
Commenter la réponse de Utilisateur anonyme
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
0
Merci
Je pense ...
Extrait du premier code :
 JTable tableau = new JTable(model);
this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
Commenter la réponse de Dominique49
0
Merci
Oups désolé j'avais sauté cette partie ^^'

Est-ce que tu as touché aux méthodes repaint ou paintComponent ? Si oui, peux-tu poster les codes stp ?

Sinon, (je n'ai pas vu cette question dans les messages), qu'est-ce qu'il se passe pour ton JPanel quand il ne se rafraichit pas ? Tu as toujours select et buttons de placés mais pas ton Table au milieu ?




-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
Commenter la réponse de Utilisateur anonyme
Messages postés
148
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
19 juin 2016
0
Merci
Oui, c'est ça, rien ne bouge, tout simplement ...
Bon, j'ai pas touché au paintComponent() de mon JPanel ...
Et j'ai juste essayer le repaint après avoir ajouté le tableau à mon JPanel ...
et c'est là que ça marche pas, autrement dit, rien ne bouge sauf si on redimensionne la fenêtre ...
Commenter la réponse de Dominique49