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 :

JProgressBar dans JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut JProgressBar dans JTable
    Bonjour,

    J'ai ici un probleme de rafraichissement,
    j'utilise une JProgressBar dans une JXTable.




    Voici la table :
    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
     
    public ProcessObjectTable() {
            super(new BorderLayout());
            modele = new ProcessTableModel();
            table = new JXTable(modele);
            table.setRowHeight(22);
            table.setHorizontalScrollEnabled(false);
            table.setColumnControlVisible(true);
     
     
     
            table.getColumnExt(1).setMaxWidth(100);
            table.getColumnExt(2).setMaxWidth(100);
     
            table.setDefaultRenderer(JButton.class, new ButtonRenderer());
            table.setDefaultEditor(JButton.class,new ButtonEditor());
            table.setDefaultRenderer(JProgressBar.class, new ProgressRenderer());
     
            jsp = new JScrollPane(table);
            add(BorderLayout.CENTER,jsp);
     
        }

    J'ai redefini le Cell Renderer comme suit :
    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
     
    /**
     *
     * @author johann Sorel
     */
    public class ProgressRenderer implements TableCellRenderer{
     
        /** Creates a new instance of ButtonRenderer */
        public ProgressRenderer() {
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        return (JProgressBar)value;
        }
     
    }
    Le probleme est qu'on ne voit pas le chargement de la JprogressBar.
    (il ne se redessine pas)


    J'ai essayé de faire des mise a jour de la cellule comme suit :
    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
     
    jpb_progress.setIndeterminate(true);
            jpb_progress.setString("En Cours");
     
            new Thread(){
                public void run(){
     
                    while(activ){
                        try{
                            sleep(10);
                        }catch(Exception e){}
                        //System.out.println("OK   "+activ);
                        updateTableRender();
                    }
                    updateLine();
                }
            }.start();
     
    //du code long

    et les 2 methodes de mise a jour (tab est un TableModel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void updateTableRender(){
            if(activ){
                tab.fireCellUpdated(row,col);
            }
        }
     
        private void updateLine(){
            tab.fireRowUpdated(row);
        }
    Bref mes JProgressBar ne se rafraichissent toujours pas...
    Ils marchent tres bien. C'est juste une fois inserer dans la Table qu'ils ne se rafraichissent pas automatiquement.

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    d'abord, une petite intervention au niveau conceptuel pour se mettre dans le bain : si un jour tu veux représenter la progression sous forme de JLabel, tu dois te retaper tout le Model et le Renderer. La JTable a été conçue pour que le Model contienne les données (e.g. un pourcentage ou un nombre compris entre 0 et 1) et que le Renderer construise le composant qui affiche ses données (e.g. une ProgressBar, ou un JLabel). En gros, le Model ne sait pas si le nombre sera représenté sous forme de ProgressBar ou autre.

    Pourquoi je te bassine avec ça ? Parce que dans le cas actuel, le contenu de la JTable ne change pas (c'est toujours la même JProgressBar qu'il y a dedans), donc l'affichage n'est jamais actualisé. Si tu stockes un pourcentage dans le TableModel, lors de la progression tu feras monModel.setValueAt(row, col, percent), le TableModel se dira "tiens on m'a fait un setValueAt, il faut que j'actualise l'affichage de telle case", et ils vivront heureux et auront beaucoup d'enfants.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    + 1,
    voilà comment j'aurais fait moi :

    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
    @SuppressWarnings("serial")
    class ProgressRenderer extends JProgressBar implements TableCellRenderer
    {
    	public ProgressRenderer()
    	{
    		setValue(50); // initialisation
    		setBorderPainted(true);
    	}
     
    	public Component getTableCellRendererComponent(JTable table, Object value, 
    		 boolean isSelected,boolean hasFocus, int row, int col)
    	{
     
    		setValue((Integer)value);
    		if (isSelected)  setBorder(BorderFactory.createLineBorder(Color.BLUE,2));
    		else setBorder(null);
    		return this;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void setTable()
    	{
    		tableCommandes.getColumn("barre de progression")
    		.setCellRenderer(new ProgressRenderer());
     
    	}

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut
    Ok, bon ca marche presque comme je le voulais.

    Mais ma progressBar est souvent en mode "indeterminated",
    elle reste toujours static (sur son premier cran), mais ca me parait logique vu que le renderer le dessine comme si cetait la premiere fois (elle repart de zero a chaque fois).
    J'ai palier en la faisant osciller de 0 a 100 plutot qu'en mode indeterminé, ca suffit a mon probleme.

    Merci bien .

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

Discussions similaires

  1. Insérer une JProgressBar dans une JTable
    Par forum dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/03/2011, 19h44
  2. [JTable][RadioButton]Afficher groupe de boutons dans JTable
    Par leminipouce dans le forum Composants
    Réponses: 11
    Dernier message: 21/02/2006, 17h04
  3. Vérification de l'etat des JComboBox dans JTable
    Par nicotine002 dans le forum Composants
    Réponses: 5
    Dernier message: 26/01/2006, 11h47
  4. combobox dans jtable
    Par nicotine002 dans le forum Composants
    Réponses: 1
    Dernier message: 10/01/2006, 23h01
  5. Selection listener dans JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 02/08/2004, 17h56

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