Modifier ordre des lignes de JTable

alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012 - 28 mai 2007 à 17:32
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012 - 31 mai 2007 à 09:07
bonjour,
j'ai developpe un JTable  et deux bouton up & down dans une interface graphique avec swing.
Je veux changer l'ordre de la ligne selectinnee de tableau en haut ou en bas selon le bouton clique:

J'ai cherche bien l'instruction dans la classe de JTable dans javadoc et j'ai pas trouve une instruction pour l'ordre???
est ce que il ya quelqu'un qui sait comment on peut la faire.
Merci pour vous aides

7 réponses

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
28 mai 2007 à 17:47
Salut,

regarde sur ce lien ICI (dinon en plus beau il y a ICI)il montre comment faire un tri sur un JTable

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
breathfromhell Messages postés 26 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 6 mars 2009
28 mai 2007 à 18:15
si tu utilise JDK 1.6 JTable t'offre une fonction de tri il suffit de cliquer sur le nom de la colonne :
   
   maTable.setAutoCreateRowSorter(true);
c tout
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
29 mai 2007 à 13:41
j'ai JDK 1.5 .
Mon but n'est pas de tri les lignes,
 
mon besoin:
je selectionne la 2 eme ligne puis je clique sur buton up . La ligne selectionne doit etre à la position 1.

et si je selectionne la 4 ligne puis je clique sur buton down elle devient a la ligne 5.
est ce que ce ci est fesable ou pas avec swing et jtable??
0
breathfromhell Messages postés 26 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 6 mars 2009
29 mai 2007 à 17:31
bien sur tu peux faire ca mais tu dois reagir sur la TableModel tu connais deja comment instancier ta JTable deux possibilites;

import java.util.Vector;



import javax.swing.table.AbstractTableModel;



public class MTableModelExemple extends AbstractTableModel
{
 private static final long serialVersionUID = 1L;



 Object data[][];
 
 String titres[];
 
 public void setData(Object[][] data)
 {
  this.data = data;
 }
 public void setData(Vector data)
 {
  Object[][] temp = new Object[data.size()][]; 
  for(int i = 0 ; i <data.size(); i++)
  {
   Vector current = (Vector) data.get(i);
   temp[i] = new Object[current.size()];
   for(int j = 0; j < current.size();j++)
   {
    temp[i][j] = current.get(j);
   }
  }
  this.data = temp;
  
 }
 
 public Object[][] getData()
 {
  return this.data;
 }
 
 public void setTitres(Vector names)
 {
  String[] temp = new String[names.size()];
  for(int i = 0;i < names.size();i++)
  {
   temp[i] = (String)names.get(i);
  }
  this.titres = temp;
  
 }
 
 public void setTitres(String [] titres)
 {
  this.titres = titres;
 }



 public Object[] getColumnNames()
 {
  return this.titres;
 }
 



 public int getRowCount()
 {
  return this.data.length;
 }



 public int getColumnCount()
 {
  return this.titres.length;
 }



 public Object getValueAt(int rowIndex, int columnIndex)
 {
  return data[rowIndex][columnIndex];
 }
 
 public MTableModelExemple()
 {
  data = new Object[1][1];
  titres = new String [1];
 }
 // tes fonctions fonctionnelles
 
 
public void setRowUp(int index)
 {
  if(index < -1 || index > data.length)
   return;
  
  Object tempData[][] = new Object[data.length][titres.length];
  
  for(int i =0;i < titres.length;i++)
  {
   tempData[0][i] = data[index][i];
  }
  
  int k = 1;
  for(int i = 0;i < data.length;i++)
  {
   for(int j = 0;j < titres.length;j++)
   {
    if(i != index)
    {
     tempData[k][j] = data[i][j];
     k++;
    }
   }
  }
  
  this.data = tempData;
  fireTableDataChanged();
 }



}

voila tu peux adapter ca a ton projet
MTableModelExemple MTable = new MTableModelExemple ();
MTable.setData(taMatrice);
MTable.setTitres(tableDeTitre);
JTable matable = new JTable(MTable);

pour appeler la fonction matable.getModel().setUp(NumeroDeLaLigne);

tu recompile et tu essaye c pas exacte a 100% car j ai pas essayer mais ca va te donner une idee au moins
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
29 mai 2007 à 21:59
matable.getModel(). mais il n'affiche pas
setRowUp
(NumeroDeLaLigne);
 il ne la connait pas .

Mais si on a :private Vector donnees; pas de type objects[][] comment je procede ?? est ce que j'utilise variable auxiliaire??
       
0
breathfromhell Messages postés 26 Date d'inscription vendredi 23 mars 2007 Statut Membre Dernière intervention 6 mars 2009
30 mai 2007 à 16:49
tu vas  pas utiliser matabble.getModel() biensur il va pas reconnaitre la methode tu vas faire MTable.setRowUp() ca ila va connaitre ta JTable vas se modifier dans la fonction setRowUp() on a utilise fireTableDataChanged();

pour vecteur ou bien Object[][] c pas un grand probleme tu peux implementer une methode qui transform un vect en Object[][]
dans la classe MTableModelExemple tu vas ajouter deux setters voila :

public void setData(Vector data)
 {
  Object[][] temp = new Object[data.size()][]; 
  for(int i = 0 ; i <data.size(); i++)
  {
   Vector current = (Vector) data.get(i);
   temp[i] = new Object[current.size()];
   for(int j = 0; j < current.size();j++)
   {
    temp[i][j] = current.get(j);
   }
  }
  this.data = temp;
  
 }

de meme pour les titres :

public void setTitres(Vector names)
 {
  String[] temp = new String[names.size()];
  for(int i = 0;i < names.size();i++)
  {
   temp[i] = (String)names.get(i);
  }
  this.titres = temp;
  
 }

Bon voila normalement ca doit marcher a merveil
0
alias100 Messages postés 129 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 2 décembre 2012
31 mai 2007 à 09:07
Bonjour, j'ai essaye votre code et j'ai pas obtenu un resultat. voici mon nouveau code de model dans lequel je dois ajouter deux methode up et down.

Code:
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class Model extends AbstractTableModel {
         
        private Vector donnees;
       
        private final String[] titres;
     
        public Model(Vector donnees, String titres[]) {
            this.donnees = donnees;
            this.titres = titres;
        }
        public int getRowCount() {
            return this.donnees.size();
        }
        public int getColumnCount() {
            return this.titres.length;
        }
        public String getColumnName(int col){
            return titres[col];
        }
        public boolean isCellEditable(int row, int col) {
            return false;
        }
        //
         public void deleteRow(int rowIndex) {
                donnees.remove(rowIndex);
                fireTableRowsDeleted(rowIndex,rowIndex); //pour notifier la suppression de la ligne à tous les composants ayant posé un listener sur le model
         }
       
         public Object getValueAt(int arg0, int arg1) {
            Personne  p = (Personne) donnees.get(arg0);
               if( arg1 == 1) {
                  return p.getPrenom();
               } else if( arg1 == 2) {
                   return p.getAdresse();
               }
               else if( arg1 == 0) {
                   return p.getNom();
               }
               else {
                  return null;
               }
        }

j'ai reflechi pour UP: je ne sais pas est ce que le code est juste ou pas:
int ligne_selec = TAB.getSelectedRow();
             if(ligne_selec>0)         
             {
             Personne P=(Personne)VP.get(ligne_selec);
             VP.remove(P);
             temp_pers.add(P);
             Personne P_av=(Personne)VP.get(ligne_selec-1);
             VP.add(ligne_selec-1,P);
           
             TAB.updateUI();
             }

Merci
0