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 :

JScrollPane et JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut JScrollPane et JTable
    Hello à tous,

    Je m'arrache les cheveux depuis plusieurs heures et je ne m'en sors pas.
    J'ai une JFrame(BorderLayout) et je veux mettre une JTable dans CENTER.
    Jusque là pas de soucis.

    Le truc c'est que je voudrais que ladite JTable adapte sa taille à celle de la JFrame et que des ascenseurs apparaissent si la totalité de la JTable n'est pas affichée.

    Merci de votre aide, il ne m'en reste déjà plus beaucoup.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Copié/collé d'un code généré par NetBeans qui fait ce que tu demandes :

    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
    public class NewJFrame extends javax.swing.JFrame {
     
        public NewJFrame() {
            jScrollPane1 = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
     
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }
            ));
            jScrollPane1.setViewportView(jTable1);
     
            getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
     
            pack();
        }
     
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }
     
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTable jTable1; 
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    C'est sympa mais trop simple pour que ça réponde à mon besoin.
    Pas que je sois pointilleux mais j'ai oublié de préciser certains points importants semble t-il.

    Je crée ma JTable via un AbstractTableModel.

    Je force la largeur des colonnes.

    Lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    js= new JScrollPane();
    tab= new TabCentral(new TabModel(), this);
    ((TabModel) tab.getModel()).init(s);
    js.setViewportView(tab);
    getContentPane().add(js, BorderLayout.CENTER);
    ça me crée un tableau plus grand que la JFrame (d'une hauteur de 20 lignes) alors que j'en ai réellement que 12.
    Ascenseur ok et lorsque je redimensionne la JFrame à la main il disparait.
    Mais lorsque j'ajoute des lignes, pas d'ascenseur

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    lorsque vous ajoutez des lignes, est-ce que cet évènement est fait après le 1er affichage de la JTable ?
    Car il ne faut pas oublier alors de signaler que le contenu de celle-ci a changé, et que le processus doit la redessiner.

    Il faut donc après l'ajout de ligne, exécuter un:
    MaTableAbstraite.fireTableRowsInserted( ... ); dans le cas d'une insertion de ligne.

    Voyez aussi fireTableRowsDeleted, fireTableRowsUpdated et fireTableDataChanged dans le même genre.

    @ bientôt...

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    A chaque insertion de ligne, je fais fireTableDataChanged().

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par voyager75 Voir le message
    j'ai oublié de préciser certains points importants semble t-il.
    Cachotier ...


    En plus de ce qu'a justement dit rtg57 (fireTableRowsInserted), il faut parfois coller des coups de validate() au JScrollPane
    éventuellement dans un java.awt.EventQueue.invokeLater pour des raisons d'ordonancement d'évènement.
    Un expert en EDT nous en dirait sans doute plus à ce sujet.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Autre précision, l'ajout des lignes se fait dans un autre Thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Thread initThread= new Thread() {
    	public void run() {
    		int i= 0;
    		if(cpt== 0)
    			while(cpt< mx.length) {
    				ctu[cpt]= new InfoFichier(mx[i++], false);
    				majBar(mx.length); }
    		else
    			while(cpt<= mx.length) {
    				ctu[cpt]= new InfoFichier(mx[i++], false);
    				majBar(mx.length); } } };
    Voici la fonction que j'appelle lors de l'insertion d'une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void majBar(final int v) {
    	fireTableDataChanged();
    	SwingUtilities.invokeLater(new Runnable() {
    		public void run() {
    			WinU.mOm.js.validate(); } });
    	WinU.mOm.pBar.setValue((int) ((double) ((double) (cpt / ((double) v + 1))) * 100));
    	WinU.mOm.pBar.repaint(); }
    L'ajout du validate ne change rien.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    J'avais un SetPreferredSize qui trainait

    Merci à vous deux

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

Discussions similaires

  1. [JScrollPane] [JTable] Se placer à la dernière ligne
    Par wishnight dans le forum Composants
    Réponses: 9
    Dernier message: 24/12/2015, 18h42
  2. [JScrollPane][JTable] déplacer l'ascenceur sur addRow
    Par Magguy dans le forum Composants
    Réponses: 3
    Dernier message: 19/11/2004, 16h15
  3. [JScrollPane] position du Jtable contenu
    Par fraoustin dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 13/10/2004, 22h29
  4. [JSplitPane+JScrollPane+JTable] Dimensionnement
    Par TreizeSegments dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 13/08/2004, 13h41
  5. [JSCROLLPANE][JTABLE] Probleme de raf...
    Par thibaud dans le forum Composants
    Réponses: 5
    Dernier message: 04/05/2004, 11h26

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