2010-10-07 10 views
1

J'ai une colonne pour les images. Je voudrais joindre des informations textuelles supplémentaires qui ne seront lues que pour l'affichage.JTable: comment ajouter des données sans afficher?

Comment puis-je y parvenir? Je cherche une colonne "fantôme".

Vous cherchez un moyen de stocker des données persistantes qui stocke temporairement l'application java client et téléchargements plus tard sur le serveur.

Répondre

3
  1. Créez le TableModel normalement avec deux colonnes des données
  2. Créer le JTable en utilisant la TableModel
  3. Obtenez le TableColumnModel de la JTable
  4. Retirez le TableColumn (de TableColumnModel) que vous ne voulez pas afficher dans la table. Cela ne va pas supprimer les données dans le modèle, il ne suffit pas de peindre la colonne dans la vue de la table.

Maintenant, lorsque vous souhaitez référencer les données dans la colonne cachée dont vous avez besoin pour obtenir les données de la TableModel, pas le JTable:

Object cellData = table.getModel().getValueAt(...); 
2

Il serait utile de voir ce que votre TableModel ressemble, nous pourrions vous donner des idées qui offriraient des changements minimes à votre conception actuelle. Cependant, une solution consisterait à concevoir un objet de données personnalisé qui représenterait une ligne dans votre table et que votre TableModel utilisera pour fournir les données correctes pour chaque colonne, y compris l'image que vous affichez actuellement.

modifier:

fondamentalement, j'ai une table à une seule colonne et DefaultTableModel mis en place avec 2 colonnes. Je voudrais seulement afficher la première colonne du modèle.

Je vous suggère de créer votre propre TableModel en étendant AbstractTableModel. Pour cela, vous avez juste besoin de mettre en œuvre trois méthodes:

public int getRowCount(); 
public int getColumnCount(); 
public Object getValueAt(int row, int column); 

Vous pouvez alors fournir une collection de support comme un List pour stocker vos données de ligne. Votre getRowCount() pourrait renvoyer la taille de la liste, votre getColumnCount() pourrait renvoyer 1 pour votre colonne d'image. getValueAt() retournera alors l'image de l'objet de données personnalisé que j'ai mentionné ci-dessus.

+0

fondamentalement, j'ai une table à une seule colonne et DefaultTableModel mis en place avec 2 colonnes. Je voudrais seulement afficher la première colonne du modèle. – KJW

0

Vous devez étendre la classe AbstractTableModel ou DefaultTableModel et passer outre getValueAt (ligne, colonne) et les méthodes setValueAt.

0

Utilisez-vous un TableModel personnalisé? Vous pouvez remplacer getColumnCount() comme ceci:

@Override 
public int getColumnCount() { 
    return super.getColumnCount() - 1; 
} 

De cette façon, votre modèle aura la dernière colonne cachée, mais vous serez toujours en mesure de le lire avec getValueAt()

Questions connexes