Modifier ordre des lignes dans JTable (PAS DE TRI)

Modifier ordre des lignes dans JTable (PAS DE TRI) - Java - Programmation

Marsh Posté le 31-05-2007 à 09:20:09    

Bonjour,
J'ai utilise JTable dans mon interface graphique  pour afficher les coordonnes d'une personne dans un tableau.

Code :
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Vector;
  4. import javax.swing.table.AbstractTableModel;
  5. public class Model extends AbstractTableModel {
  6.  private Vector<Personne> donnees;
  7.  private final String[] titres;
  8.  public Model(Vector donnees, String titres[]) {
  9.   this.donnees = donnees;
  10.   this.titres = titres;
  11.  }
  12.  public int getRowCount() {
  13.   return this.donnees.size();
  14.  }
  15.  public int getColumnCount() {
  16.   return this.titres.length;
  17.  }
  18.  public String getColumnName(int col){
  19.   return titres[col];
  20.  }
  21.  public boolean isCellEditable(int row, int col) {
  22.   return false;
  23.  }
  24.  //
  25.          public void deleteRow(int rowIndex) {
  26.                 donnees.remove(rowIndex);
  27.                 fireTableRowsDeleted(rowIndex,rowIndex); //pour notifier la suppression de la ligne à tous les composants ayant posé un listener sur le model
  28.          }
  29.          public Object getValueAt(int arg0, int arg1) {
  30.   Personne  p = (Personne) donnees.get(arg0);
  31.      if( arg1 == 1) {
  32.         return p.getPrenom();
  33.      } else if( arg1 == 2) {
  34.       return p.getAdresse();
  35.      }
  36.      else if( arg1 == 0) {
  37.       return p.getNom();
  38.      }
  39.      else {
  40.         return null;
  41.      }
  42.  }
  43. }

 
 
Ceux ci est le model de mon tableau . Le code de l'interface graphique est:

Code :
  1. import java.awt.event.*;
  2. import java.util.Vector;
  3. import javax.swing.*;
  4. public class Gui implements ActionListener {
  5. private JFrame cadre;
  6. private JPanel pane;
  7. private JButton bouton_up,bouton_down;
  8. private JTable TAB;
  9. private JScrollPane scrollpane;
  10. private Vector<Personne> VP,temp_pers;
  11. private String [] columns  = { "Nom", "Prenom","Adresse"};
  12. private Personne P1,P2,P3,P4;
  13. public Gui()
  14. {
  15. cadre = new JFrame("test" );
  16. cadre.setSize(200,200);
  17. pane = new JPanel();
  18. bouton_up=new JButton("UP" );
  19. bouton_down=new JButton("DOWN" );
  20. bouton_up.addActionListener(this);
  21. bouton_down.addActionListener(this);
  22. VP = new Vector();
  23. P1 = new Personne ("AAA","aa","France" );
  24. P2 = new Personne ("BBB","bb","France" );
  25. P3 = new Personne ("CCC","cc","France" );
  26. P4 = new Personne ("DDD","dd","France" );
  27. VP.add(P1);
  28. VP.add(P2);
  29. VP.add(P3);
  30. VP.add(P4);
  31.     Model MTable = new Model (VP,columns);
  32.     TAB = new JTable(MTable);
  33. scrollpane= new JScrollPane(TAB,
  34.   ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
  35.   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
  36. pane.add(scrollpane);
  37. pane.add(bouton_up);
  38. pane.add(bouton_down);
  39. cadre.getContentPane().add(pane);
  40. cadre.setVisible(true);
  41. }
  42. public void actionPerformed(ActionEvent arg0) {
  43.  // TODO Auto-generated method stub
  44.  temp_pers=new Vector();
  45.  if (arg0.getSource()==bouton_up)
  46.  {
  47.  }
  48.  if (arg0.getSource()==bouton_down)
  49.  {
  50.  }
  51. }
  52. public static void main(String[] args) {
  53.  // TODO Auto-generated method stub
  54.  Gui T = new Gui ();
  55. }
  56. }


 
 
ICI j'ai deux boutons up et down. Lorsque je selectionne ligne n°3 et je clique sur bouton up elle devient a position n°2
et si je clique sur bouton down elle devient a position n°4.
J'ai pas connu les instructions a mettre et qui realise cette operation :pt1cable:  :pt1cable:  
 
 
Est ce qu'il ya quelqu'un qui peut m'aider ....Merci

Reply

Marsh Posté le 31-05-2007 à 09:20:09   

Reply

Marsh Posté le 31-05-2007 à 10:11:28    

faut que tu fasse le swap dans ton vector et tu fireTablemachinchanged()

Reply

Marsh Posté le 31-05-2007 à 19:28:41    

did-54 a dit :"swap dans ton vector "  
c'est a dire qoui???

Reply

Marsh Posté le 31-05-2007 à 19:30:16    

je voulais dire, inverser l'ordre des lignes dans ton vector. si tu veux remonter la ligne 4, tu met la ligne 4 dans la ligne 3 et la ligne 3 dans la ligne 4.

Reply

Marsh Posté le 31-05-2007 à 21:18:59    

oui je sais en realite c'est iverser les lignes mais avec quel instruction en java

Reply

Marsh Posté le 02-06-2007 à 00:15:48    

il n'y a pas de fonction toute faite
- tu fais une copie temporaire de la ligne 3 (avec elementAt)
- tu copie la ligne 4 sur la 3 (avec setElement)
- puis la copie temporaire tu la copie sur la ligne 4 (avec setElement)

Reply

Marsh Posté le 02-06-2007 à 00:20:53    

Hum JTable de base c'est vilainement mal :) Utilise une classe héritant de AbstractTableModel à la place, exemple un DefaultTableModel :) Justement notre DefaultTableModel possède une methode qui swap deux ligne ou qui déplace une ligne dans une autre position, tu peu meme déplacé plusieurs lignes préalablement séléctionner :f
DefaultTableModel: http://java.sun.com/j2se/1.4.2/doc [...] Model.html
Tu crée ton DefaultTableModel avec ton Vector puis tu crées ta JTable avec ton DefaultTableModel et voilà :f apres tes modif tu les fait sur ton DefaultTableModel et par magie les modifications sont repercuté sur l'affichage grace au Listener des TableModels :)
Les JTables ca va pour apprendre :f apres faut passer au level au dessus mais tu veras en fait c'est juste rajouté une couche au final c'est plus simple parce que ta beaucoup plus de méthodes dispo dans les Héritiés de DefaultTableModel

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed