2009-11-24 27 views
0

Est-ce que quelqu'un connaît un exemple de code de composant ou de composant Swing basé sur JTable qui peut enregistrer dans un fichier? i.e: fournit un élément de menu ou un bouton qui, lorsqu'il est cliqué, invite l'utilisateur à rechercher un emplacement de fichier et enregistre le contenu de la table dans un fichier (CSV, XLS, TXT ou autre).JTable pouvant enregistrer dans un fichier

La partie facile parcourt les lignes et enregistre dans un fichier. Mais il doit également y avoir un composant UI sur la table elle-même qui permet à l'utilisateur de lancer la sauvegarde.

+0

Où sur la table vous attendez-vous à voir ce bouton? Il est possible de mettre des boutons dans les cellules du tableau, mais je ne pense pas que cela aurait du sens dans ce cas particulier. Y a-t-il une raison pour laquelle le bouton ne peut pas être au-dessus, en dessous ou à côté du JTable? De plus, si vous enregistrez le contenu de TableModel sous forme de fichier, devez-vous également charger le contenu? – rob

Répondre

5

Écrivez le votre. Tout ce que vous faites est d'utiliser la méthode table.getModel(). GetValueAt (...) et de faire une boucle dans les lignes et les colonnes, puis d'écrire les données dans un fichier.

+0

Juste mis à jour la question de mentionner qu'il doit également y avoir un composant de l'interface utilisateur sur la table elle-même qui permet à l'utilisateur de lancer la sauvegarde. – tukushan

+2

Mais c'est juste un bouton, intitulé "Enregistrer" et une action derrière cela appelle votre méthode de sauvegarde. –

0

Je ne connais aucun composant Swing de type JTable qui répond exactement à ce besoin.

Cependant, où voulez-vous que le bouton soit placé sur la table? À mon avis, vous seriez mieux servi soit en ajoutant le JTable à un JScrollPane et en mettant votre bouton "save" sur le JScrollPane ou en ajoutant le JScrollPane à un JPanel et en mettant le bouton "save" sur le JPanel. Je ne vois pas la logique derrière avoir un bouton sur le JTable lui-même.

Si vous voulez un élément de menu, vous voudrez probablement créer la barre de menu et ajouter la table JTable à n'importe quel conteneur contenant la barre de menus. Il n'y a toujours pas d'ajout d'un bouton sur la table elle-même, attention, mais ce serait la même chose visuellement.

1

J'ai mis cela en utilisant l'approche suivante:

  • Créer une implémentation Action: DelimitedExportAction. J'ajoute généralement cette action à JToolBar, JMenuBar ou JPopupMenu.
  • Exposez une méthode void registerTable(JTable tbl). En interne, cette méthode ajoute un FocusListener au JTable. Lorsqu'un JTable donne le focus, définissez la variable d'instance tableToExport et activez l'action.
  • Lorsque la méthode actionPerformed(ActionEvent) est appelée, appelez votre logique d'exportation si tableToExport != null.
  • Plutôt que de parcourir la TableModel Je recommande itérer sur la JTable, et pour chaque ligne appelant getValueAt(int, int) sur le sous-jacent TableModel, ne pas oublier de convertir entre l'affichage et les indices de ligne/colonne modèle. Ceci est plus intuitif pour l'utilisateur final car cela signifie que tout tri et filtrage appliqué au JTable est conservé pendant l'exportation. (Dans ma mise en œuvre, j'offre aux utilisateurs le choix d'exporter toutes les données ou données visibles.)
  • Définir un DelimitedExportFormatter dont le rôle est de convertir chaque objet renvoyé par getValueAt(int, int) en String. Semblable à la fourniture de rendus à un JTable, cette classe devrait vous permettre de fournir un format pour une colonne Class donnée, ou un format spécifique à une colonne a préséance. Le format par défaut appliqué à toutes les autres valeurs doit être: value == null ? "" : value.toString().
  • J'autorise l'action à configurer dans différents modes (qui régit également l'icône de l'action):
    • Exporter vers un fichier: lance une boîte de dialogue de sélection de fichier permettant à l'utilisateur de spécifier la destination d'enregistrement.
    • Exporter vers Excel: enregistre les données exportées en tant que fichier temporaire et les ouvre dans Excel.
    • Exportation configurable: lance une boîte de dialogue dans laquelle l'utilisateur peut spécifier: délimiteur de lignes, délimiteur de champs, colonnes à exporter, lignes à exporter (toutes, visibles, sélectionnées), destination d'enregistrement (Excel/Fichier).

Je crains que je ne peux pas donner le code tel qu'il est propriétaire, mais nous espérons que cela vous mettrez sur la bonne voie. Bonne chance!

0

J'ai récemment créé un tutoriel très simple qui exporte des données de JTable dans un fichier Excel, en utilisant le format TSV (Tab-Separated Values). L'application fournit un bouton Exporter qui déclenche ensuite une boîte de dialogue (JFileChooser) pour aider l'utilisateur à spécifier l'emplacement/la destination du fichier. J'espère que cela aide en quelque sorte.

https://sites.google.com/site/teachmemrxymon/java/export-records-from-jtable-to-ms-excel

enter image description here

enter image description here

Questions connexes