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 :

redefinir un scrollpane pour une JList


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut redefinir un scrollpane pour une JList
    Bonjour,
    j'ai besoin de redefinir l'action des boutons de la scrollbar verticale d'un scrollpane

    parce que j'ai une liste tres grosse, et je veux pas remplir la JList completement, seulement une
    dizaine de lignes
    donc quand on scroll vers le bas il faut que les lignes superieures de la JList soit vidées et les lignes
    inferieures se remplissent grace à la liste

    mais j'arrive pas à trouver les boutons du scrollpane, je pense que je dois
    cree un nouveau scrollpane extends JScrollPane à moins qu'il y ait une façon plus rapide

  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
    Pour récupérer la scrollbar verticale de ton JScrollPane tu as la méthode getVerticalScrollbar.

    Puis ensuite au niveau de ta JScrollabr il faut que lui affecte un Model spécifique, et que tu lui ajoutes un AdjustmentListener pour savoir quand l'utilisateur a modifié la position de la JScrollbar.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import java.awt.*;
    import java.awt.event.*;
     
    import javax.swing.*;
    import javax.swing.event.*;
     
    /* ListDemo.java requires no other files. */
    public class ListDemo extends JPanel
                          implements  AdjustmentListener {
        private JList list;
        private DefaultListModel listModel;
     
        private JScrollPane listScrollPane;
        private JScrollBar listScrollBar;
        private String cache[]=new String[40];
        private int oldrow=0;
     
        public ListDemo() {
            super(new BorderLayout());
     
            for (int i=0;i<40;i++)cache[i]="xx"+i; 
            listModel = new DefaultListModel();
     
            list = new JList(listModel);
     
            for (int i=0;i<40;i++)listModel.addElement(".");
     
            listModel.setElementAt(cache[2], 2);
            listModel.setElementAt(cache[3], 3);
            listModel.setElementAt(cache[4], 4);
            listModel.setElementAt(cache[5], 5);
            listModel.setElementAt(cache[6], 6);
            listModel.setElementAt(cache[7], 7);
     
            listScrollPane = new JScrollPane(list);
            listScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            listScrollBar=listScrollPane.getVerticalScrollBar();
     
            add(listScrollPane, BorderLayout.CENTER);
     
            list.setVisibleRowCount(10);
            listScrollBar.addAdjustmentListener(this);
     
        }
     
     
        /**
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
         */
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("ListDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create and set up the content pane.
            JComponent newContentPane = new ListDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
     
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
     
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
     
    	public void adjustmentValueChanged(AdjustmentEvent e) {
    		// TODO Auto-generated method stub
    		if (e.getSource() == listScrollBar){
    			int newrow=e.getValue()/18;
    			if (newrow>oldrow && newrow+7<40){
    				for (int i=oldrow+1;i<=newrow;i++){
    					listModel.setElementAt(cache[i+7], i+7);
    					listModel.setElementAt(".", i+1);
    			}
     
    			}
    			if (newrow<oldrow && newrow>=0){
    				for (int i=oldrow-1;i>=newrow;i--){
    					listModel.setElementAt(cache[i+2], i+2);
    					listModel.setElementAt(".", i+8);
    				}
    			}
     
     
    			System.out.println("Adjusted: " +oldrow+"_"+ newrow);
    			oldrow=newrow;
    		}
    	}
     
     
    }
    merci de ton aide
    voila le code
    quand je scroll vers le bas il vide les elements superieurs et remplit ceux du bas
    j'ai besoin de ça pour sauver un maximum de memoire, car la liste que j'utiliserai fait 100.000+ lignes


    je me demande si mettre un "." (parce qu'avec "" ça marche pas) a la place d'une chaine pleine fera vraiment gagner

    là la Jlist a la meme taille que la liste qui fera 100.000 lignes mais avec plein de lignes "vides" est ce que j'ai interet a utiliser une Jlist plus petite, ou ça ne change pas grand chose

  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
    Bon en fait l'idée la plus simple serait tout simplement un modèle de JList qui fait du lazy loading.

    C'est à dire qu'il connait le nombre de lignes afficher, puis qu'il charge les données au fil des requêtes de la JList, et en mette un certain nombre en cache.

    Voici un article qui décrit la mise en place de ce procédé pour une JTable, l'idée sera la même pour un JList: http://www.javaworld.com/javaworld/j...37.html?page=2

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    merci pour le lien
    moi je dois remplir des JTables depuis une base de données postgresql

    il faut soit que je modifie la source du zip de javaworld
    parce que dans le lien la JTable est en lien avec la dataSource d'un serveur tomcat
    il faut pour moi qu'elle soit liée à datasource de la connection avec ma base postgre
    soit que je trouve un autre exemple

Discussions similaires

  1. Comment créer un Listener pour une JList
    Par onh890 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/05/2011, 23h46
  2. Soucis pour personnaliser une JList
    Par Zoners dans le forum Composants
    Réponses: 5
    Dernier message: 16/05/2010, 12h08
  3. image de fond pour une JList
    Par barbiche dans le forum Composants
    Réponses: 1
    Dernier message: 04/05/2007, 12h10
  4. [Synth] Afficher une bordure colorée pour une JList
    Par nicolas.pied dans le forum Composants
    Réponses: 5
    Dernier message: 18/01/2006, 16h51
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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