Bonjour,
Je souhaiterai savoir s'il était possible d'intégrer des fichiers excel dans des combobox sur Netbeans GUI.
Merci d'avance de votre aide
Bonjour,
Je souhaiterai savoir s'il était possible d'intégrer des fichiers excel dans des combobox sur Netbeans GUI.
Merci d'avance de votre aide
Hello,
il faut le faire à la main. cf. ApachePOI pour lire des fichiers Excel
Merci Pill_S de ta réponse si rapide,
J'ai utilise Apache POI, comme tu me le conseilles.
Mais en fait, pour appeler mon fichier excel je lui dit "au clic de la combobox, tu vas chercher le fichier excel à tel endroit". Il va bien me chercher mon fichier, m'affiche tout mon fichier excel dans une jTable dynamique.
Le problème est que je voudrait qu'il importe le fichier que dans la combobox. Mais à chaque fois que je clique sur le combobox j'ai tout le fichier excel qui se ré-affiche dans la table.
Comment faire pour qu'il n'y ait pas de doublons (dans la table) et que seul le choix de l'utilisateur soit afficher dans la table. Et pas tout le fichier...
Merci de votre aide
Tu devrais ne charger le fichier excel qu'une seule fois, à l'initialisation de la combobox.
Montre le code, tu t'y prends peut-être mal...
J'ai modifié mon message précédent, car je me suis trompé, le fichier excel ne s'affiche pas du tout dans la combo, mais juste dans la table.
Voici le code, lorsque je clique sur la combobox :
Je voudrais donc, que le fichier excel se charge directement dans la combobox.
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 private void comboActionPerformed(java.awt.event.ActionEvent evt) { try { Workbook excel = Workbook.getWorkbook(new File ("C:\\Users\\test.xls")); //pour changer de feuille sur excel for (int onglet_feuille =0 ; onglet_feuille < excel.getNumberOfSheets() ; onglet_feuille++) { Sheet feuille = excel.getSheet(onglet_feuille); int colonne = feuille.getColumns(); //colonnes totales int ligne = feuille.getRows(); //lignes totales Object[] valeurs = new Object[colonne]; for (int une_ligne=0 ; une_ligne<ligne ; une_ligne++) { for (int une_colonne=0 ; une_colonne <colonne ; une_colonne++) { if (une_ligne == 0) { //on regarde ce qu'il y a à la 1ère la ligne model_1.addColumn(feuille.getCell(une_colonne, 0).getContents()); } valeurs[une_colonne] = feuille.getCell(une_colonne, une_ligne).getContents(); } model_1.addRow(valeurs); } } model_1.removeRow(0); excel.close(); } catch (IOException | BiffException ex) { Logger.getLogger(Graph.class.getName()).log(Level.SEVERE, null, ex); } }
Merci d'avance de votre aide.
Oui, rien ne te semble bizarre?
Pourquoi est-ce que tu attend une action sur la combo pour... essayer de charger son contenu? PS: je pars du postulat que la méthode "comboActionPerformed" est appelée par le listener attaché à une action sur la combo...
Le chargement doit s'effectuer lorsque tu construits & initialise la combo, donc, pas loin du "new JComboBox"...
Ça marche du feu de dieu, merci Pill_S !! Depuis le début je me focalisais sur le fait qu'il fallait que ça soit sur une action de la combobox, bref, ça marche mieux
J'ai à présent changé de place le chargement de mon fichier excel. Tout marche presque bien.
J'ai changé mon initialisation :
Au lieu de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 model = new DefaultComboBoxModel(); combo.setModel(model);
Puis, comme j'ai changé en combo au lieu de la table, je devais changer les "addRow", "addColumn" et "removeRow" en "addElement et "removeElement"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 model = new DefaultTableModel(); table.setModel(model);
On voit la 1ère ligne de mon document excel, puis après on compte le bon nombre d'élément de mon document excel dans la combobox mais au lieu d'avoir "fraise", "framboise", j'ai : "[Ljava.lang.Object;@1672c01".
J'ai fais des recherches sur l'erreur. J'ai vu qu'il fallait que j'ajoute ".getClass()". Mais même, en ajoutant cela, j'ai toujours des erreurs.. Je dois mal m'y prendre.. J'ai maintenant comme erreur : "[Ljava.lang.Object;@"
J'ai aussi vu que je devais ajouter un "ma_classe.class.getName()" mais je le met déjà dans l'exception, donc le compilateur n'est pas content...
Merci de votre aide
Hello,
euh, pas tout compris, tu mélanges pas mal de choses là il me semble...
pour les addXxx et removeXxx, ok soit, je vais pas plonger dans tous les détails du truc... par contre ton problème de "[Ljava.lang.Object;@" machin, c'est juste parce que l'objet est un tableau et que ça, c'est la version "toString" d'un tableau.
Pour le maclass.class.getName, rien ne t'empeche d'en mettre de partout, même si je doute que cela soit vraiment ce que tu veux faire...
on va reprendre: il te faut une méthode qui charge les données du fichier excel. il te faut aussi une combobox. Pour alimenter la liste des choix de la combo, tu as plusieurs choix, à savoir utiliser un ComboBoxModel (choix le plus puissant mais aussi le plus compliqué), un Vector ou un tableau d'objets. Je te propose d'utiliser le tableau d'objets, c'est le plus simple si tu n'as pas besoin de la puissance apportée par les autres options.
Donc ça amène un code de la forme suivante:
Voilà, essaie ça et reviens (avec le code complet) si jamais ça marche pas
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 public class SomeClassName { private Object[] getOptionsFromExcel() { List<Object> options = new LinkedList<Object>(); // ici, lire le contenu du fichier Excel, et ajouter // chaque valeur désirée à la liste "options" (sous forme de string ou // autres, mais pas de tableau... fait bien attention aux signatures des // méthodes que tu utilises pour lire le fichier excel, je parie que certaines // renvoient des tableaux d'objets au lieu des strings que tu attends.) // on retourne la liste des options sous forme de tableau return options.toArray(); } private JComboBox jComboBox; private JComboBox getJComboBox() { if(jComboBox==null) { // initialisation de la combobox. la 1ère étape est de récupérer les options qui seront disponible Object[] options = getOptionsFromExcel(); // on construit la combo avec les options désirées jComboBox = new JComboBox(options); // on continue l'initialisation des autres propriétés jComboBox.addActionListener(...); } return jComboBox; } ... }
Trouvéééé, il suffisait de mettre un ".toString()"
Oh, je viens seulement de voir ta réponse, merci beaucoup Pill_S pour toute l'aide que tu m'apportes.
Je vais t'embêter encore un peu, je souhaiterai à présent ajouter le choix sélectionné, par l'utilisateur, dans la combobox (et alimentée par le fichier excel) dans une table.
J'ai mis ça dans un "ActionPerformed" de la combobox et j'ai commencé avec un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //si quelque chose est sélectionné if (combo.getSelectedItem() == "") model_1.addElement(new Object[] { combo.getSelectedItem() //j'ai un problème sur cette ligne, je voudrais qu'il mette le choix de la combo dans la table });
Merci pour l'aide
regarde du côté de la doc de JTable, et notament get/setModel, et setValueAt, tu devrais comprendre facilement comment ça se passe
D'accord
Alors finalement, au lieu d'utiliser le "ActionPerformed", j'ai utilisé un "MouseClicked" et j'ai fait :
J'ai l'impression de n'être pas loin du compte. Est-ce que c'est une illusion ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private void comboMouseClicked(java.awt.event.MouseEvent evt) { DefaultTableModel model = (DefaultTableModel) tableau.getModel(); model.getValueAt(tableau.getSelectedRow(), 0).toString(); }
mouais... t'es quand même pas tout proche non plus...
mouselistener c'est pas trop ça... tu veux vraiment qu'il se passe des trucs à chaque fois que tu cliques sur la combo (même sans qu'il y ait de sélection ou autres?)... pour t'en convaincre, mets un System.out.println("combo click"); dans le listener, tu verras que c'est exécuté bien trop souvent par rapport à ton besoin...
ensuite, getValueAt, ça va rien faire à la jtable... faut utiliser setValueAt, qui est une opération de modification de l'état de la jtable (get, en java, c'est toujours et uniquement, de la lecture)
Essaie ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void actionPerformed(ActionEvent ae) { Object selectedOption = ((JComboBox) ae.getSource()).getSelectedItem(); tableau.getModel().setValueAt(selectedOption, tableau.getSelectedRow(), 0); }
C'est géniaaaaal Merci beaucoup Pill_S pour cette aide précieuse.
Pour ceux qui passent par là, je conseille :
- Je me suis rendue compte au cours de mes recherches qu'il y avait un topic similaire : http://www.developpez.net/forums/d14...mbobox-jtable/
- et aussi : http://docs.oracle.com/javase/tutori...html#listeners (même s'il est donné dans le topic d'avant)
Merci encore Pill_S
P.S : j'adore ta signature "Ne renonce jamais" ça me donnais du courage, haha. (Merci Pill_S)
Hello Pill_S,
Il semblerait que je sois déjà de retour, haha.
Je ne savais pas si je pouvais continuer dans le même topic ou pas, vu que c'est un peu la continuation... Alors, j'ai préféré en créer un nouveau...
Je remet ma question :
http://www.developpez.net/forums/d14...tir-jcombobox/
Merci d'avance pour tout
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager