Bonsoir,
Non ceci n'est pas un énième sujet pour savoir comment marche un JScrollPane, j'ai déjà épluché une bonne partie de documentation dessus, mais plutôt comment l'intégrer dans mon code
Donc je fais un gestionnaire de mot de passe, j'ai une "page" qui affiche les mots de passes (ces derniers sont stockés à la suite dans un fichier texte sous cette forme: pseudo|motdepasse|description|dated'expiration) j'affiche ces mot de passes dans des textField sous forme de grille (4 colonnes et un nombre de ligne qui varie en fonction du nombre de mot de passe enregistrés) ce qui nous donne visuellement ca:
https://i.gyazo.com/70135c91589ed454...2ccb4917b8.png
Hors le souci c'est que si j'écris beaucoup de mot de passe la fenêtre ne se scroll pas (vous pouvez voir la barre a droite qui ne marche pas), et je n'arrive pas à faire marcher la scrollbar parce que mon code est un peu "compliqué".
Il est réparti en plusieurs fenêtres (une de connexion, une pour rajouter un mot de passe ...), la fenêtre que vous voyez est la fenêtre principale, voici à quoi elel ressemble:
la fonction Init() permer d'afficher les mots de passes si l'utilisateur s'est logué:
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 public class FenetreGraphique extends JFrame implements ActionListener,Serializable { private static final long serialVersionUID = 1L; Hashtable<String, String> listeUtilisateur = new Hashtable<String, String>(); JPasswordField txtPassword = new JPasswordField("password",20); JTextField nomUti; private String utilisateurActuel,mdpActuel; static Boolean afficheSuite=false; Vector <String> tabUti = new Vector <String>(); utilisateur uti; JTextField [] textField; zoneAffichage pan; public FenetreGraphique(String fen) throws Exception { super(fen); setResizable(false); setLayout(null); Init(); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane( ).setLayout(new java.awt.FlowLayout( )); initUtilisateur(listeUtilisateur); File file = new File("utilisateurActuel.dat"); file.delete(); setVisible(true); }
comme vous pouvez le voir "pan" à la 8ème ligne fais appel à zoneAffichage()
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 public void Init() throws Exception { File MyFile = new File("utilisateurActuel.dat"); MyFile.delete(); if(afficheSuite) // fenetre pour affichage mdp { setSize(1000,600); pan = new zoneAffichage(); //initialisation du vector contenant les infos de l'utilisateur actuel tabUti=utiActuel(); this.setUtilisateurActuel(tabUti.elementAt(0)); this.setMdpActuel(tabUti.elementAt(1)); pan.setSize(900,600); JMenuBar menuBar = new JMenuBar(); JMenu menuGestion = new JMenu("Menu de gestion"); JMenuItem ajoutPW =new JMenuItem("Ajouter un mot de passe"); setJMenuBar(menuBar); menuBar.add(menuGestion); menuGestion.add(ajoutPW); //Gere l'ajout du mot de passe ajoutPW.setActionCommand("ajoutPW"); ajoutPW.addActionListener(this); uti=new utilisateur(getUtilisateurActuel(),getMdpActuel()); zoneAffichage.nom=uti.getNom(); zoneAffichage.mdp=uti.getMdp(); JButton refresh = new JButton("Raffraichir"); //Permet de rafraichir la liste quand on entre un mot de passe refresh.setActionCommand("refresh"); refresh.addActionListener(this); JScrollPane scrollPane = new JScrollPane(pan); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); add(refresh); add(scrollPane); // add(pan); // la suite du code est en rapport avec la connexion d'un utilisateur, pas utile dans le cas la
voici zoneAffichage:
Donc mon souci c'est que je voudrais pouvoir scroller "pan" qui contient les textField comme on voit sur le screen, mais j'ai essayé beaucoup de "méthodes" différentes en applicant un JScrollPane sur d'autres éléments (le pan, la fenetre graphique, l'instance courante, les textFields) mais sans succès, auriez-vous une solution ?
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 public class zoneAffichage extends JPanel implements Serializable { static String nom,mdp; utilisateur utilisa; private static final long serialVersionUID = 1L; Vector <String> tabUti = new Vector <String>(); public zoneAffichage() { tabUti=utiActuel(); nom=tabUti.elementAt(0); mdp=tabUti.elementAt(1); utilisa=new utilisateur(nom,mdp); utilisa.ouverture(); int nbLigne= (utilisa.tabInfoMdp.size()/4); System.out.println("nbLigne " + nbLigne); GridLayout gl = new GridLayout(); gl.setColumns(4); gl.setRows(nbLigne+1); this.setLayout(gl); JLabel labelPseudo = new JLabel("Pseudo"); JLabel labelMdp = new JLabel("Mot de passe"); JLabel labelDescr = new JLabel("Description"); JLabel labelDate = new JLabel("Date d'expiration"); this.add(labelPseudo); this.add(labelMdp); this.add(labelDescr); this.add(labelDate); System.out.println(nom+" "+mdp); System.out.println(utilisa.getNom()+" "+utilisa.getMdp()); JTextField [] textField = new JTextField[(utilisa.tabInfoMdp).size()]; for(int i = 0; i<((utilisa.tabInfoMdp).size()); ++i) { try { textField[i]=new JTextField(password.decrypt(utilisa.getMdp(), (utilisa.tabInfoMdp).elementAt(i))); textField[i].setColumns(15); this.add(textField[i]); } catch(Exception e) { e.printStackTrace(); } } this.revalidate(); }
Merci et passez de bonnes fêtes
Partager