Bonjour
Pour choisir la colonne souhaitée à partir d'un menu, j'ai fait ceci mais ça ne fonctionne pas.
J'ai fait les écouteurs "à la main" mais dans le cas ou on a 1000 choix par exemple, ça ne pourra pas être possible de faire comme ça.
pouvez-vous m'indiquer comment m'y prendre pour que ça fonctionne et pour ne pas faire les écouteurs un à un
Merci
Certes..
Je me permets une question naïve: Pourquoi ne pas utliser un IDE tel que Netbeans qui ferait tout le travail pour toi automatiquement ?
Je ne m'y connais pas.
Concernant mes soucis, pourrais-tu m'indiquer comment régler cela ?
Merci
Ben justement, il n'y a rien à y connaître. Tu vas à http://www.netbeans.org Tu télécharges un Netbeans et avec tu construis ton interface à coup de souris et tu n'as plus qu'à insérer ton code dans le corps des méthodes générées automariquement et appelées automatiquement par les écouteurs.
Ben je pensais l'avoir fait. Pour ne pas avoir à tout écrire à la main, il faut faire appel à un outil qui automatise le travail. Enfin je pense.
Le souci c'est pas vraiment d'écrire les écouteurs à la main dans la classe que j'ai mis mais plutot de faire fonctionner le programme.
Je ne sais pas très bien comment m'y prendre pour sélectionner la colonne de la JTable que je veux.
Non. Je contribue volontiers à ce forum mais il faut une limite ;)
Je vois.
Je n'avais pas compris la question comme ça au début.
Simple. Je laisserais tomber le tableau comme structure de données pour les colonnes. Je définirais une classe colonne contenant un titre et son contenu. Et j'utiliserais deux ArrayList dans le modèle de données de la table. Dans la première je mettrais toutes les colonnes de la table. La deuxième serait définie à la volée selon les choix de menu et contiendrait donc tout ou partie de la première. Ou simplement le nom des colonnes à afficher. Et mes méthodes getValuteAt et compagnie ne parcourait que la deuxième ArrayList. Eventuellement en se référant, mais dans un second temps à la première si par exemple la deuxième ne contient que des noms de colonnes. Suis-je clair ?
En faite, ça ne m'est pas possible de changer Object [][] datas par autre chose car dans d'autres classes que j'utilises, c'est cette forme que j'utilises et si je modifie ça il faudra aussi que je modifie des méthodes, etc ...
Tout marche nickel à part cette classe de Test et je ne voudrais pas me retrouver avec plein d'erreurs
Si tu as une idée avec la manière dont j'ai écrit ma classe, je suis preneur
Merci
J'ai viré tous les actionListener car ça ne fonctionnait pas.
Oui en effet ...
Sans vouloir trop philosopher, voilà ton problème. On nous raconte que les composants Swing sont MCV, soit Model (données) View (représentation graphique) et Control (de l'utilisateur) sont découplés.
Tu te heurtes au fait que ça n'est pas vrai, la vérité est qu'on pourrait dire que c'est du M-VC, du modèle d'un côté et de l'autre côte Vue et contrôle sont couplés.
Ce que tu veux faire est plus proche du MVC que du M-VC et c'est la cause de tes difficultés. Et la suggestion que je t'ai faite se base sur l'idée d'un meilleur MVC. Donc tout autre idée avec la même intention peut convenir. Mais puisqu'il s'agit de découpler, il est évident que cela implique des modifications sur le code.
Maintenant pour ton code et ton cas particulier, je vois une solution rapide. Tu gardes ton tableau columnsVisible mais tu le redimensionnes dynamiquement à la volée et tu le remplis de même. C'est possible de faire un mécanisme de tableau dimensionnés dynamiquement à partir du mécanisme de réflexion de Java. Sinon, peut être plus simplement (ça devrait suffire si je comprends bien ton ocde), tu re-crées et remplis le tableau en fonction des besoins, c'est à dire en fonction des choix de l'utilisateur. Comme ça, si j'ai bien compris, les modifs ne vont pas au délà de la présente classe.
Mais bon, j'ai quand même du mal à suivre pourquoi sous prétexte que ton constructeur reçoit Object [][] datas, tu ne pourrais pas, à partir de ça, construire et utiliser des ArrayList en interne.
Je me suis inspiré d'un code
Il te dit que quand tu as *toi même* géré le nouveau columnsVisible, tu appelles la méthodes fireMachin pour que ta table se redessine.
Le code fonctionne correctement dans le cas non dynamique mais dans la cas dynamique je n'y arrive pas
Sincèrement je crois que c'est fait. Tu dois avoir besoin de respirer un bon coup et de prendre un peu de recul. Tu y verras sans doute plus clair après.
D'une façon ou d'une autre, c'est bien ce qu'il faut faire.
Là je ne sais pas ce que tu appelles "tester".
Si tu veux *voir à l'écran* le résultat des opérations, il faut que la table se redessine et pour cela tu dois *invoquer toi même* la méthode fireTableDataChanged pour rafraîchir l'affichage. Ca aussi ça a été dit.
Moyennant quoi si ton tableau columnVisibles, tes méthodes getColumnName, getValueAt et compagnie sont corrects, ça marchera, pour sûr.
J'ai testé avec l'item "toutes les colonnes" qui dans mon exemple ne devrait faire apparaitre uniquement la colonne 2.
Houlà... Le compilateur est mécontent pour une évidente raison. Tu ne crois pas qu'une interface ActionListener ça préfère une méthode actionPerformed :?: :!:
il me semble que
sera plus agréable au compilateur :)
Hum. Si tu écoutes les clicks sur ta JList, getSelectedValue doit te tirer d'affaire pour avoir la chaîne concernée.
Pardonne moi, je ne veux surtout pas te peiner en disant ça, mais il me semble que soit tu as besoin de repos pour y voir plus clair ensuite, soit tu as besoin d'acquérir quelques bases en programmation Swing pour pouvoir arriver à tes fins.
Edit : en faite, j'avais j'initialisait 2 fois JList d'ou les problemes :lol:
En effet, et cette classe intérieure (innner) c'est ta classe anonyme new ListSelectionListener // etc...
Donc ? Et pourquoi *donc* ?
Evidemment....
Tu as vu ton code ?
Pourquoi pas un seul
:?: :?:
Et puis sinon, si tu ne veux pas déclarer liste final, il suffit que la méthode de la classe anonyme appelle une méthode (à écrire) de ta classe MyTable pour sortir de la portée et avoir le droit d'accéder à liste.
Toutes choses très simples et basiques en somme.
Pardonne moi , mais dis ? Tu as beaucoup d'expérience en Java ? Parce qu'il me semble qu'il te manque quand même quelques fondamentaux que tu devrais acquérir avant de te lancer dans une application. Sinon tu risques de t'arracher les cheveux.
En effet, ça ne fait que quelques mois que je fais du Java/Interface graphique
J'avais édité mon post après m'être rendu compte que j'avais initialidé 2 fois la JListe
J'ai modifié mon code pour ne pas avoir à utiliser le modificateur final.
"Quel est le bruit produit par le battement d'une seule main ?"
Hakuin Zenji, Maître Zen du XVIII siècle,
Un arbre qui tombe dans la forêt fait-il du bruit s'il n'y a personne pour l'entendre ?
Bref quand tu envoies fireTableDataChanged, tu mets un évenement dans la file. Mais si persone n'écoute l'événement et n'y réagis ça ne va pas servir à grand chose. Qui va écouter ? Par exemple le composant ou le JFrame qui contient la Jtable à redessiner. Il devra donc implementer TableModelListener et définir une méthode dans cet esprit:
Etant entendu que le modèle aura enregistré le composant écouteur par un
dans son cosntructeur par exemple.
Bon je crains que tu ne rencontres d'autres problèmes ensuite, mais je pense que je n'aurais plus le temps de t'aider avant un moment. Les fêtes... tout ça, et puis je pense t'avoir beaucoup aidé déjà.
Au fait, je vois que tu as édité un message pour en supprimer tout le contenu récemment. Ca ne va pas aider à suivre la discussion ceux qui voudrait prendre le relai et t'aider.