IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

utilisation Class AbstractTableModel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Par défaut utilisation Class AbstractTableModel
    bonsoir!

    j'utilise la classe AbstractTableModel pour insérer des données provenant d'un fichier texte dans une structure table.
    ma question est la suivante:
    est ce que cette classe me permet de sélectionner des lignes de ma table et les mettre dans une autre structure table?
    j'ai vu la java doc et je n'ai pas trouvé une méthode abstraite qui permet de faire la sélection de lignes, avez-vous des suggestions ?

    merci d'avance !

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Nayra Voir le message
    est ce que cette classe me permet de sélectionner des lignes de ma table et les mettre dans une autre structure table?
    Je ne comprend pas trop ce que tu cherches à faire exactement ?
    Tu veux recopier certaines lignes dans une autre JTable ???


    a++

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Par défaut
    bonjour !

    oui, c'est ça !
    mais je n'utilise pas une JTable, en fait je travaille avec le modèle généré par AbstractTableModel et les méthodes abstraites qu'elle fournisse ( getValueAt , getRowCount ....)

    Merci !

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Euh... c'est encore moins clair !

    Tu fais quoi du modèle si tu n'utilises pas de JTable !?!?


    Expliques ce que tu veux faire, et non pas comment tu penses le faire...


    a++

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Par défaut
    salut,
    mon code est le suivant: le modèle puis la JTable



    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
    import javax.swing.*;
    import javax.swing.table.*;
    import java.io.*;
    import java.util.*;
     
    public class RecuperationDonneesData extends AbstractTableModel {
    	protected Vector data; // données
    	protected Vector columnNames; // noms de colonnes
    	protected String datafile;
     
    	public RecuperationDonneesData(String f) {
    		datafile = f;
    		initVectors();
    	}
     
    	public void initVectors() {
    		String ligne;
    		data = new Vector();
    		columnNames = new Vector();
    		try {
    			FileInputStream fin = new FileInputStream(datafile);
    			BufferedReader br = new BufferedReader(new InputStreamReader(fin));
    			// lecture des noms de colonnes (1ère ligne)
    			ligne = br.readLine();
    			StringTokenizer st1 = new StringTokenizer(ligne, ",");
    			while (st1.hasMoreTokens())
    				columnNames.addElement(st1.nextToken());
    			// lecture des données
    			while ((ligne = br.readLine()) != null) {
    				StringTokenizer st2 = new StringTokenizer(ligne, ",");
    				while (st2.hasMoreTokens())
    					data.addElement(st2.nextToken());
    			}
    			br.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	public int getColumnCount() {
    		return columnNames.size();
    	}
     
    	public int getRowCount() {
    		return data.size() / getColumnCount();
    	}
     
    	public String getColumnName(int columnIndex) {
    		String colName = "";
    		if (columnIndex <= getColumnCount())
    			colName = (String) columnNames.elementAt(columnIndex);
    		return colName;
    	}
     
    	public Class getColumnClass(int columnIndex) {
    		return String.class;
    	}
     
    	public boolean isCellEditable(int rowIndex, int columnIndex) {
    		return false;
    	}
     
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		return (String) data.elementAt((rowIndex * getColumnCount())
    				+ columnIndex);
    	}
     
    	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    	}
     
    }

    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
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
    import java.util.*;
     
    public class Table extends JPanel {
     
    	public Table(String dataFilePath) {
    		JTable table; // le tableau
    		RecuperationDonneesData model; // le modèle
    		// fonte
    		Font f = new Font("SanSerif", Font.PLAIN, 24);
    		setFont(f);
    		// gestionnaire de positionnement
    		setLayout(new BorderLayout());
    		// construction du modèle de remplissage à partir du fichier
    		model = new RecuperationDonneesData(dataFilePath);
    		// création du tableau
    		table = new JTable();
    		table.setModel(model);
    		table.createDefaultColumnsFromModel();
    		// scroller
    		JScrollPane scrollpane = new JScrollPane(table);
    		add(scrollpane);
    	}
     
    	public Dimension getPreferredSize() {
    		return new Dimension(400, 300);
    	}
    }

    j'essaye de recopier des lignes dans une autre JTable, à partir des lignes constituant mon modèle, sans toucher à la structure initiale de mon modèle.
    je pense que je dois implémenter une méthode au niveau de la classe RecuperationDonneesData.
    mais je ne trouve pas comment !

    pouvez-vous m'aider

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Par défaut
    j'ai trouvé ceci:

    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
    import java.util.Arrays;
     
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableModel;
     
     
    public class FiltreTriModel extends AbstractTableModel implements TableModel{
     
    	private static final long serialVersionUID = -2757129423131249207L;
    	private TableModel model;
    	private int colonneTri;
    	private Ligne[] lignes;
     
     
    	/**
             * This customized abstract table model sort the attached table.
             * @param m : base table model.
             */
    	public FiltreTriModel(TableModel m) 
    	{
    		super();
    		model = m;
    		lignes = new Ligne[model.getRowCount()];
    		for (int i = 0; i < lignes.length; i++) 
    		{
    			lignes[i] = new Ligne();
    			lignes[i].index = i;
    		}
    	}
     
     
    	public boolean isCellEditable(int rowIndex, int columnIndex) 
    	{
    		if (columnIndex == 2)
    			return true;
    	    else
    	    	return false;
    	}
     
     
    	public void setValueAt(Object aValue, int rowIndex, int columnIndex) 
    	{
    	    Object[][]data = ((GadgetsTableModel)model).getDatas();
    	    data[rowIndex][columnIndex] = aValue;
    	    fireTableDataChanged();
    	}
     
     
    	public void sort(int c) 
    	{
    		colonneTri = c;
    		Arrays.sort(lignes);
    		fireTableDataChanged();
    	}
     
     
      	public Object getValueAt(int r, int c) 
      	{
    	    return model.getValueAt(lignes[r].index, c);
      	}
     
     
    	public int getRowCount()
    	{  
    		return model.getRowCount();
    	}
     
     
    	public int getColumnCount()
    	{  
    		return model.getColumnCount();
    	}
     
     
    	public String getColumnName(int c)
    	{  
    		return model.getColumnName(c);
    	}
     
     
    	public Class<?> getColumnClass(int c)
    	{  
    	    //return (c == 1 || c == 2) ? Number.class : Object.class;
    		  return model.getColumnClass(c);
    	}
     
     
    	public void addEcouteur(final JTable table) 
    	{
    		table.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() 
    		{
    			public void mousePressed(java.awt.event.MouseEvent event) 
    			{
    		        if (event.getClickCount() < 1) 
    		        	return;
    		        int tableColumn = table.columnAtPoint(event.getPoint());
    		        int modelColumn = table.convertColumnIndexToModel(tableColumn);
    		        sort(modelColumn);
    		    }
    		});
    	}
     
     
    	@SuppressWarnings("unchecked")
    	private class Ligne implements Comparable {
    		    public int index;
     
    			public int compareTo(Object autre) 
    			{
    				Ligne autreLigne = (Ligne)autre;
    				Object cellule = model.getValueAt(index, colonneTri);
    				Object autreCellule = model.getValueAt(autreLigne.index, colonneTri);
    				return ((Comparable)cellule).compareTo(autreCellule );
    		    }
    	}
    }
    j'ai lu dans un tuto que FiltreTriModel est un modèle de table avec:
    • une référence au modèle réel
    • un tableau de lignes
    • une méthode de tri de ce tableau


    donc normalement, ce code doit implémenter une méthode de tri, mais je la trouve pas !!!
    j'ai lu aussi que le tri peut se faire par un double clic sur une colonne (des évènements) , mais moi je cherche à trier avec une méthode, pas avec un évènement de clic.

    merci pour votre patience !!

Discussions similaires

  1. Pourquoi utiliser Class.forName().newInstance()
    Par menzlitsh dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2007, 14h00
  2. utilisation classe Superfile
    Par jonckers dans le forum C++Builder
    Réponses: 1
    Dernier message: 27/04/2007, 09h37
  3. utiliser classe onglet java
    Par franfr57 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/10/2006, 20h41
  4. probleme utilisation classe java dans jsp
    Par prosper76 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/10/2006, 09h31
  5. utilisation classe vector et supression de doublons
    Par vandevere dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/06/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo