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

Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 27 avril 2011 à 13:20 - Dernière réponse : Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention
- 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

Répondre au sujet
Utilisateur anonyme - 27 avril 2011 à 18:40
+3
Utile
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 --
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 27 avril 2011 à 16:20
0
Utile
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
Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 27 avril 2011 à 17:11
0
Utile
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
Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 28 avril 2011 à 09:16
0
Utile
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
Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 28 avril 2011 à 09:17
0
Utile
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
Utilisateur anonyme - 28 avril 2011 à 22:36
0
Utile
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
Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 29 avril 2011 à 10:47
0
Utile
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
Utilisateur anonyme - 29 avril 2011 à 16:26
0
Utile
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
Dominique49 148 Messages postés mardi 10 août 2010Date d'inscription 19 juin 2016 Dernière intervention - 29 avril 2011 à 16:32
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.