Bonjour,
J'ai un JTable et quand je clic sur une cellule d'un JTable, sa m'ouvre une fenêtre avec une liste et quand je sélectionne une valeur dans cette liste, je souhaiterais qu'elle s'ajoute dans la cellule de ma JTable.
Or, cela me provoque une exception:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
Voici mes différentes classes:
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 public class CalendrierTableModele extends AbstractTableModel { /** * serialVersionUID */ private static final long serialVersionUID = 1L; /** * Attribut Calendrier calendrier */ private Calendrier calendrier; private Calendar calendar; private final List<Seance> seances; /** * Constructeur * @param calendar * @param calendrier */ public CalendrierTableModele(Calendar calendar, Calendrier calendrier, List<Seance> seances){ this.calendar = calendar; this.calendrier = calendrier; this.seances = seances; } /** * Méthode qui retourne le nombre de colonne * @return les 7 jours de la semaine */ public int getColumnCount(){ return 7; } /** * Méthode qui retourne le nombre de ligne * @return les 2 lignes : matin et après-midi */ public int getRowCount(){ return 2; } /** * Méthode qui retourne la valeur d'une cellule * @param row : index de la ligne * @param col : index de la colonne * @return Object */ public Object getValueAt(int row, int col){ if(seances.size() != 0) return seances.get(row).getModule().getNom(); else return ""; } /** * Méthode qui permet de dire si une cellule est éditable ou non * @param row : index de ligne * @param col : index de la colonne * @return boolean */ public boolean isCellEditable(int row, int col){ return false; } /** * Méthode qui permet d'ajouter une valeur dans une cellule * @param row : index de la ligne * @param col : index de la colonne */ public void setValueAt(Object value, int row, int col){ if(value != null){ Seance seance = seances.get(row); seance.getModule().setNom((String)value); } } /** * Méthode qui retourne le nom d'une colonne * @param col : index de la colonne */ public String getColumnName(int col) { return getDayName(col); } /** * Méthode qui retourne nom d'un jours en français * @param day * @return le libellé du jours */ private String getDayName(int day) { Calendar calendarDay = Calendar.getInstance(); calendarDay.setTime(calendar.getTime()); calendarDay.add(Calendar.DATE, day); return calendarDay.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault())+" "+calendarDay.get(Calendar.DATE); // bug sur cette ligne calendar au lieu de calendarDay } /** * Accesseur en lecture * @return calendrier */ public Calendrier getCalendrier() { return calendrier; } /** * Accesseur en écriture * @param calendrier */ public void setCalendrier(Calendrier calendrier) { this.calendrier = calendrier; } /** * Accesseur en lecture * @return calendar */ public Calendar getCalendar() { return calendar; } /** * Accesseur en écriture * @param calendar */ public void setCalendar(Calendar calendar) { this.calendar = calendar; } public void addSeance(Seance seance) { System.out.println(seance.getModule().getNom()); //calendrier.getUneFormation().getSeances().add(seance); seances.add(seance); fireTableRowsInserted(seances.size() -1, seances.size() -1); } public List<Seance> getSeances(){ return seances; } }Merci de votre aide
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 public class Seance extends JFrame implements ActionListener, WindowListener{ /** * serialVersionUID */ private static final long serialVersionUID = 1L; private JComboBox liste; private JButton creer; private JPanel panChoixModule; private JLabel choixModule; private JScrollPane ascenseur; private List<metiers.Module> modules; private int ligne; private int colonne; private CalendrierTableModele calendrierTableModele; /** * Constructeur * @param accueil */ public Seance(List<metiers.Module> modules, int ligne, int colonne, CalendrierTableModele calendrierTableModele){ this.modules = modules; this.ligne = ligne; this.colonne = colonne; this.calendrierTableModele = calendrierTableModele; setTitle("Ajout d'une séaunce"); setSize(300,250); setLocationRelativeTo(null); ajouterComposants(); this.addWindowListener(this); } /** * Méthode qui ajoute les composants graphiques à la vue */ private void ajouterComposants(){ //Liste des module liste = new JComboBox(); liste.addItem("Veuillez seléctionner un module"); for(metiers.Module unModule : modules){ liste.addItem(unModule.getNom()); } liste.setSelectedIndex(0); //ascenseur = new JScrollPane(liste); // ascenseur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //Ajout des différents composants au panel panChoixModule = new JPanel(); creer = new JButton("Créer la séance"); choixModule = new JLabel("Veuillez choisir un module à placer"); choixModule.setFont(new Font(null, Font.BOLD, 16)); //panChoixModule.setLayout(new BorderLayout()); panChoixModule.add(liste); add(choixModule, BorderLayout.NORTH); add(panChoixModule); add(creer, BorderLayout.SOUTH); creer.addActionListener(this); } /** * Méthode appelée lors du clic sur le bouton creer */ public void actionPerformed(ActionEvent event) { Object valeur = liste.getSelectedItem(); metiers.Seance uneSeance = new metiers.Seance(); metiers.Module module = new metiers.Module(); module = uneSeance.convertirUneSeance(valeur.toString()); uneSeance.setIndexColonne(colonne); uneSeance.setIndexLigne(ligne); uneSeance.setModule(module); System.out.println(ligne); calendrierTableModele.addSeance(uneSeance); this.dispose(); } public void windowActivated(WindowEvent arg0){} public void windowClosed(WindowEvent arg0){} public void windowClosing(WindowEvent arg0){} public void windowDeactivated(WindowEvent arg0){} public void windowDeiconified(WindowEvent arg0){} public void windowIconified(WindowEvent arg0){} public void windowOpened(WindowEvent arg0){} }
Partager