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

AWT/Swing Java Discussion :

Problème pour rafraichir les composants


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Par défaut Problème pour rafraichir les composants
    Bonjour,
    Je debute en swing et j'essai de realiser une interface qui sert a renommer les fichiers.... en gros j'ai un JFileChooser qui sert pour choisir un repertoire et une JTable avec deux colonne : une avec l'ancien et l'autre avec le nouveau a saisir.
    Au debut de l'applis, j'ai qu'un JMenuBar, mais quand je charge mon repertoire, mon JScrollPane contenant ma JTable ne s'affiche pas.
    En fait je sais pas ou mettre le code, j'ai juste un JScrollPane en attribut prive de ma JFrame et dans l'actionPerformed de mon JMenuItem j'instancie ma JTable avec les bon composant. Je fais pourtant un repaint() de ma JFrame.
    Je me pose souvent ces question.... dois je mettre tous mes composant graphique en attribut privé de ma Frame, quand dois je rafraichir pour impacter les modifications? avec quelles methodes?

    Merci, si vous avez une adresse de site, je suis preneur.

  2. #2
    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
    Euh pour l'adresse de site: http://java.sun.com/docs/books/tutor...nts/table.html

    Sinon fais voire le code où tu mets la JTable dans ton JScrollPane (ou celui ou tu mets ton JScrollPane dans ta fenêtre), ce sera plus facile pour te donner un coup de main

  3. #3
    Membre éclairé Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Par défaut
    ok, c'est du code carrement bourin, mais si tu peux me dire comment organiser le code, si je dois ecrire d'autre classe qui etende certain composant ou autre....

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    public class JRenameFile extends JFrame {
     
    	private String path;
    	private JTable table;
    	private JScrollPane jscroll;
     
    	public void setPath(String path){
    		this.path = path;
    	}
     
    	public String getPath(){
    		return this.path;
    	}
     
    	public static Object[][] getListOfFileName(String path){
    		File repertoire = new File(path);
     
    		File[] list = repertoire.listFiles();
     
    		Object[][] donnees = new Object[list.length][2];
     
    		for(int i = 0 ; i < list.length ; i++){		
     
    			donnees[i][0] = list[i].getName();
    			donnees[i][1] = "";
     
    		}		
     
    		return donnees;		
    	}
     
    	public static String[] getColumnNames(){
    		String[] columnNames = {"Nom du fichier","Renommer en :"};
    		return columnNames;		
    	}
     
     
    	public JRenameFile(){
     
    		jscroll = new JScrollPane();
    		table = new JTable();
    		jscroll.setViewportView(table);
    		setTitle("Renommer simplement vos fichiers");
    		setSize(800,600);
    		GridBagLayout grid = new GridBagLayout();
    		getContentPane().setLayout(grid);
    		JMenuBar menu = new JMenuBar();
    		JMenu file = new JMenu("File");
    		JMenuItem load = new JMenuItem("load");
    		load.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				JFileChooser fc = new JFileChooser();
    				fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    				int returnVal = fc.showOpenDialog(JRenameFile.this);
    		        if (returnVal == JFileChooser.APPROVE_OPTION) {
    		            setPath(fc.getSelectedFile().getPath());
    		            table = new JTable(getListOfFileName(getPath()),getColumnNames());
    		            jscroll.setViewportView(table);
    		            GridBagConstraints c1 = new GridBagConstraints();
    		            c1.gridx = 0;
    		            c1.gridy = 0;
    		            c1.anchor = GridBagConstraints.EAST;
    		            getContentPane().add(jscroll,c1);
    		            getContentPane().repaint();
     
    		        }
    			}	
    		});
     
     
    		file.add(load);
    		menu.add(file);
    		setJMenuBar(menu);
     
    	}
     
     
    	public static void main(String[] args){
     
    		JRenameFile frame = new JRenameFile();
    		frame.setVisible(true);
     
    	}
     
    }

    Merci beauccoup

  4. #4
    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
    fais un appel à revalidate() avant le repaint()

  5. #5
    Membre éclairé Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Par défaut
    Merci, mais ça marche toujours pas... j'ai testé avec ça :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    public class JRenameFile extends JFrame {
     
    	private String path;
    	private JTable table;
    	private JScrollPane jscroll;
     
    	public void setPath(String path){
    		this.path = path;
    	}
     
    	public String getPath(){
    		return this.path;
    	}
     
    	public static Object[][] getListOfFileName(String path){
    		File repertoire = new File(path);
     
    		File[] list = repertoire.listFiles();
     
    		Object[][] donnees = new Object[list.length][2];
     
    		for(int i = 0 ; i < list.length ; i++){		
     
    			donnees[i][0] = list[i].getName();
    			donnees[i][1] = "";
     
    		}		
     
    		return donnees;		
    	}
     
    	public static String[] getColumnNames(){
    		String[] columnNames = {"Nom du fichier","Renommer en :"};
    		return columnNames;		
    	}
     
     
    	public JRenameFile(){
     
    		jscroll = new JScrollPane();
    		table = new JTable();
    		jscroll.setViewportView(table);
    		setTitle("Renommer simplement vos fichiers");
    		setSize(800,600);
    		GridBagLayout grid = new GridBagLayout();
    		getContentPane().setLayout(grid);
            GridBagConstraints c1 = new GridBagConstraints();
            c1.gridx = 0;
            c1.gridy = 0;
            c1.anchor = GridBagConstraints.EAST;
            getContentPane().add(jscroll,c1);
    		JMenuBar menu = new JMenuBar();
    		JMenu file = new JMenu("File");
    		JMenuItem load = new JMenuItem("load");
    		load.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				JFileChooser fc = new JFileChooser();
    				fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    				int returnVal = fc.showOpenDialog(JRenameFile.this);
    		        if (returnVal == JFileChooser.APPROVE_OPTION) {
    		            table = new JTable(getListOfFileName(fc.getSelectedFile().getPath()),getColumnNames());
    		            jscroll.add(table);
    		            table.revalidate();
    		            table.repaint();
    		            jscroll.revalidate();
    		            jscroll.repaint();
    		        }
    			}	
    		});
     
     
    		file.add(load);
    		menu.add(file);
    		setJMenuBar(menu);
     
    	}
     
     
    	public static void main(String[] args){
     
    		JRenameFile frame = new JRenameFile();
    		frame.setVisible(true);
     
    	}
     
    }
    Je pense plus avoir un problème d'organisation du code...

  6. #6
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    y'a bcp de probleme.
    je vais pas commencer a expliquer swing mais je vais juste te dire comment changer un peu pour que ca marche

    tu dois pas recrer chaque fois ta table et la rajouter au scrollpane. une fois suffit.

    si tu fais un truc comme ca devrait marcher?

    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
    jscroll = new JScrollPane();
            table = new JTable();
    
            jscroll.setViewportView(table);
            setTitle("Renommer simplement vos fichiers");
            setSize(800,600);
            GridBagLayout grid = new GridBagLayout();
            getContentPane().setLayout(grid);
    
            GridBagConstraints c1 = new GridBagConstraints();
            c1.gridx = 0;
            c1.gridy = 0;
            c1.anchor = GridBagConstraints.EAST;
            getContentPane().add(jscroll, c1);
    
            JMenuBar menu = new JMenuBar();
            JMenu file = new JMenu("File");
            JMenuItem load = new JMenuItem("load");
            load.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0) {
                    JFileChooser fc = new JFileChooser();
                    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                    int returnVal = fc.showOpenDialog(JRenameFile.this);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        setPath(fc.getSelectedFile().getPath());
                        table.setModel(new DefaultTableModel(getListOfFileName(getPath()),getColumnNames());
                    }
                }
            });
    
    
            file.add(load);
            menu.add(file);
            setJMenuBar(menu);
    a la place de recrer la table chaque fois, change juste le model ;-)

    en plus c'est tres rare ou tu a besoin d'appeler toi meme les methode (re)validate(), (re)paint(), doLayout()...

    ensuite, ta GridBagConstraint comme tu l'a mis elle sert a rien.
    tu aurais le meme resulltat si tu fais juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    getContentPane().setLayout(grid);
    getContentPane().add(jscroll);

Discussions similaires

  1. [2.x] Problème pour rafraichir les données en base
    Par timal78 dans le forum Symfony
    Réponses: 4
    Dernier message: 18/02/2014, 23h04
  2. Problème pour installer les composants Indy
    Par ChPr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 22/10/2008, 23h38
  3. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  4. Réponses: 1
    Dernier message: 17/05/2004, 11h29

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