Bonjour,
j'ai créé un composant Multiclasseur utilisant des JTabbedPane.
en exécutant j'ai l'erreur suivante
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 import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * une classe pour représenter un ensemble de classeurs comportant chacun plusieurs feuilles. * C'est un JTabbedPane contenant des classeurs (JTabbedPane) * Les onglets donnant les noms des classeurs est en bas du composant. */ public class MultiClasseurs extends JTabbedPane implements ChangeListener { /** * un constructeur avec une liste de noms d'onglets * @param onglets */ public MultiClasseurs(String onglets[]) { super(SwingConstants.BOTTOM); for (String s : onglets) { String[] classeurs = s.split("/"); String nomClasseur = classeurs[0]; String nomsFeuilles = classeurs[1]; Classeur classeur = new Classeur(nomsFeuilles); classeur.setVisible(nomClasseur.equals("Procédures")); this.addTab(nomClasseur, classeur); } this.addChangeListener(this); } public JPanel composantAt(int ongletClasseur, int ongletFeuille) { if (ongletClasseur >= this.getTabCount()) return null; else { JTabbedPane classeur = (JTabbedPane) this.getTabComponentAt(ongletClasseur); if (ongletFeuille >= classeur.getTabCount()) return null; else return (JPanel) classeur.getTabComponentAt(ongletFeuille); } } public JPanel feuille(String nomClasseur, String nomFeuille) { for(int i = 0 ; i < this.getTabCount() ; i++) { System.out.println(this.getTitleAt(i)); if (this.getTitleAt(i).equals(nomClasseur)) { Classeur classeur = (Classeur) this.getTabComponentAt(i); System.out.println(classeur); for (int j = 0 ; j < classeur.getTabCount() ; j++) { System.out.println(classeur.titreTab(j)); if (classeur.titreTab(j).equals(nomFeuille)) return (JPanel) classeur.getTabComponentAt(j); } return null; } } return null; } /** * @param args */ public static void main(String[] args) { JFrame fenetre = new JFrame("essai de multi classeurs"); fenetre.setExtendedState (Frame.MAXIMIZED_BOTH) ; fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fenetre.setVisible(true); String ongletsEnChaine = "Procédures/programmes;étude;valeurs\ninutilisées;problème\ninfos;contrôles;constantes:" + "Territoires/territoires;nom des\npays;nom des\ncivilisations:" + "Graphiques/graphique;travail;points;ellipse:" + "Pourtours/limes;liste de\nlimes;optimiser\nliste:" + "Points/points;points à\nsauver:" + "Etude pays/étude\npays:" + "Infos territoires/infos\nterritoires:" + "Atlas/atlas:" + "Calculs des points/calcul des\npoints;un sur\ndeux;intersection"; String onglets[] = ongletsEnChaine.split(":"); MultiClasseurs multiClasseurs = new MultiClasseurs(onglets); fenetre.getContentPane().add(multiClasseurs); multiClasseurs.composantAt(0, 0).add(new FeuilleProgrammes()); } public void stateChanged(ChangeEvent e) { JOptionPane.showMessageDialog(null, "on a cliqué sur l'onglet " + getTitleAt(this.getSelectedIndex())); } }
Exception in thread "main" java.lang.NullPointerException
at ihm.MultiClasseurs.composantAt(MultiClasseurs.java:43)
at ihm.MultiClasseurs.main(MultiClasseurs.java:91)
C'est à dire que tout se passe comme si le classeur n'avait pas eu le temps de s'initialiser.
D'où ma question comment attendre que tous les classeurs aient été créés avant d'accéder au multiClasseur.
Merci.
Partager