Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

JTABLE GÉNÉRIQUE : TRI,AJOUT,SUPPRESSION,CTRL CLASSE,TAILLE COL,SÉLECTION DES COL,RECUP LIGNES SUPP


Information sur la source

Catégorie :Systeme Classé sous : jtable, tri, ajout, suppression, java Niveau : Débutant Date de création : 29/01/2007 Date de mise à jour : 05/02/2007 19:33:36 Vu : 21 428

Note :
3,5 / 10 - par 2 personnes
3,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Permet d'utliser une jtable de manière générique et dynamique !
 

Source

  • Utilisation de la jtable :
  • Déclarer:
  • public TableModelPerso T;
  • public Tableur TAB;
  • Appel:
  • T=new TableModelPerso (
  • vect, // de type Object[][] contient les données
  • Colemploye, //de type String[] contient les entetes de col
  • false, // false si maj,true si sélection uniquement
  • vcoleditable, //de type Boolean[] les colonnes modifiables = true
  • ctrlcolemploye, //de type String[] classes des col int,long,double,float,string,date,boolean
  • vsize); // de type int[] taille des colonnes
  • TAB=new Tableur(T,1); // 0 si interdiction d'ajouter ou supprimer les lignes,1 sinon
  • TAB.affiche(this);
  • // le retour se fait via l'évents windowActivated de votre frame
  • // récupère les données via T.getDonnees() de type Object[][]
  • //récupère les lignes supp via T.getLignesup() de type Object[][]
  • copier ces deux classes
  • 1
  • import javax.swing.*;
  • import javax.swing.table.TableModel;
  • import javax.swing.event.*;
  • import java.awt.Dimension;
  • import java.awt.event.*;
  • import javax.swing.table.DefaultTableColumnModel;
  • import javax.swing.table.AbstractTableModel;
  • import java.awt.Color;
  • import java.awt.*;
  • import javax.swing.JButton;
  • import javax.swing.table.DefaultTableModel;
  • class Tableur extends JPanel implements TableModelListener
  • {
  • private Object[][] donnees;
  • private String[] nomsColonnes;
  • private JTable table;
  • private TableModel tableur;
  • private int[] vsize;
  • private javax.swing.JLabel jLabel1;
  • private javax.swing.JButton aj1,aj2;
  • private TableModelPerso tt;
  • private int ajoutsupp;
  • private int posilig;
  • Tableur(TableModelPerso vtablemodelperso,int vajoutsupp)
  • {
  • tt=vtablemodelperso;
  • ajoutsupp=vajoutsupp;
  • this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
  • table = new JTable(vtablemodelperso);
  • table.setColumnSelectionAllowed(true);
  • table.setRowSelectionAllowed(true);
  • table.setSelectionBackground(Color.BLUE);
  • table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  • int[] vsize=vtablemodelperso.getSizecol();
  • int tailletot=0;
  • for (int i=0;i<vsize.length;i++)
  • {
  • table.getColumnModel().getColumn(i).setPreferredWidth(vsize[i]);
  • if (vsize[i]==0) {table.getColumnModel().getColumn(i).setMinWidth(vsize[i]);table.getColumnModel().getColumn(i).setMaxWidth(vsize[i]);}
  • tailletot=tailletot+vsize[i];
  • }
  • vtablemodelperso.addEcouteur(table);
  • table.setPreferredScrollableViewportSize(new Dimension(tailletot+100, 300));
  • JScrollPane avecAsc = new JScrollPane(table);
  • jLabel1 = new javax.swing.JLabel();
  • jLabel1.setBackground(new java.awt.Color(255, 255, 51));
  • jLabel1.setText("Double clic sur une colonne pour trier la table");
  • jLabel1.setOpaque(true);
  • jLabel1.setName("TITRE");
  • jLabel1.setPreferredSize(new java.awt.Dimension(55, 20));
  • aj1 = new javax.swing.JButton();
  • aj1.setBackground(new java.awt.Color(255, 255, 51));
  • aj1.setText("Ajouter une ligne");
  • aj1.setPreferredSize(new java.awt.Dimension(150, 25));
  • aj2 = new javax.swing.JButton();
  • aj2.setBackground(new java.awt.Color(255, 255, 51));
  • aj2.setText("Supprimer une ligne");
  • aj2.setPreferredSize(new java.awt.Dimension(150, 25));
  • add(jLabel1);
  • add(avecAsc);
  • table.addMouseListener(new java.awt.event.MouseAdapter() {
  • public void mouseClicked(java.awt.event.MouseEvent evt) {
  • posilig=(table.rowAtPoint(evt.getPoint()));
  • }
  • });
  • if (!vtablemodelperso.isTypeselection() & ajoutsupp!=0){
  • add(aj1);
  • aj1.addMouseListener(new java.awt.event.MouseAdapter() {
  • public void mouseClicked(java.awt.event.MouseEvent evt) {
  • tt.addligne();
  • }});
  • add(aj2);
  • aj2.addMouseListener(new java.awt.event.MouseAdapter() {
  • public void mouseClicked(java.awt.event.MouseEvent evt) {
  • if (tt.getDonnees().length==0)
  • {
  • JOptionPane d = new JOptionPane();
  • d.showMessageDialog( d.getParent(),"Plus de ligne!","Erreur!",JOptionPane.ERROR_MESSAGE);
  • return;
  • }
  • table.changeSelection(posilig,0,false,false);
  • for (int k=0;k<tt.getColumnCount();k++)
  • {
  • table.changeSelection(posilig,k,false,true);
  • }
  • tt.suppligne(posilig);
  • }});
  • }
  • }
  • public void tableChanged(TableModelEvent e)
  • {
  • }
  • public void affiche( JFrame j,String vtitre)
  • {
  • final JFrame v=j;
  • JFrame monCadre = new JFrame();
  • monCadre.setTitle(vtitre);
  • monCadre.setContentPane(this);
  • monCadre.addWindowListener(new WindowAdapter()
  • {
  • public void windowClosing(WindowEvent evt)
  • {
  • v.show();
  • }
  • });
  • Insets insets = monCadre.getInsets();
  • monCadre.setSize(300 + insets.left + insets.right,125 + insets.top + insets.bottom);
  • java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  • monCadre.setBounds((screenSize.width-800)/2, (screenSize.height-600)/2, 800, 600);
  • monCadre.pack();
  • monCadre.setVisible(true);
  • }
  • public Point getLocation() {
  • Point retValue;
  • retValue = super.getLocation();
  • System.out.println(retValue);
  • return retValue;
  • }
  • public String[] getNomsColonnes() {
  • return nomsColonnes;
  • }
  • }
  • 2
  • import javax.swing.table.AbstractTableModel;
  • import javax.swing.AbstractCellEditor;
  • import javax.swing.table.TableCellEditor;
  • import javax.swing.*;
  • import java.awt.*;
  • import java.awt.event.*;
  • import java.util.Arrays;
  • import java.util.Date;
  • import java.text.SimpleDateFormat;
  • public class TableModelPerso extends AbstractTableModel
  • {
  • private Object[][] donnees,donnees1,lignesup,lignesup1,copydonnees;
  • private String[] nomsColonnes;
  • private boolean[] colmodifiable;
  • private boolean typeselection;
  • private String[] ctrlcol;
  • private int[] sizecol;
  • private Ligne[] lignes,lignes1;
  • private int colonneTri;
  • private Boolean vyes=new Boolean (true);
  • private Boolean vno=new Boolean (false);
  • private TableModelPerso model;
  • public TableModelPerso (Object[][] vdonnees, String[] vnomsColonnes,boolean vtypeselection,boolean[] vcolmodifiable,String vctrlcol[],int[] vsizecol) {
  • typeselection=vtypeselection;
  • ctrlcol=new String[vctrlcol.length];
  • sizecol=new int[vsizecol.length];
  • if (typeselection==true){
  • donnees=new Object[vdonnees.length][vnomsColonnes.length+1];
  • nomsColonnes=new String[vnomsColonnes.length+1];
  • nomsColonnes[vnomsColonnes.length]="Sélection";
  • colmodifiable=new boolean[vcolmodifiable.length+1];
  • colmodifiable[vcolmodifiable.length]=true;
  • int i;
  • for (i=0;i<donnees.length;i++)
  • { donnees[i][vnomsColonnes.length]=vno; }
  • donnees[0][vnomsColonnes.length]=vyes;
  • }
  • else
  • {
  • lignesup=new Object[vdonnees.length][vnomsColonnes.length];
  • donnees=new Object[vdonnees.length][vnomsColonnes.length];
  • nomsColonnes=new String[vnomsColonnes.length];
  • colmodifiable=new boolean[vcolmodifiable.length];
  • }
  • int i,j;
  • for (i=0;i<vdonnees.length;i++)
  • {
  • for (j=0;j<vnomsColonnes.length;j++)
  • {donnees[i][j]=vdonnees[i][j];}
  • }
  • for (j=0;j<vnomsColonnes.length;j++)
  • {
  • nomsColonnes[j]=vnomsColonnes[j];
  • if (typeselection==true)
  • colmodifiable[j]=false;
  • else
  • colmodifiable[j]=vcolmodifiable[j];
  • }
  • for (j=0;j<vctrlcol.length;j++)
  • {ctrlcol[j]=vctrlcol[j];}
  • for (j=0;j<vsizecol.length;j++)
  • {sizecol[j]=vsizecol[j];}
  • model=this;
  • lignes = new Ligne[model.getRowCount()];
  • for (i = 0; i < lignes.length; i++) {
  • lignes[i] = new Ligne();
  • lignes[i].index = i;
  • }
  • }
  • public boolean isCellEditable(int row, int col) {
  • if (colmodifiable[col]==false)
  • return false;
  • else
  • return true;
  • }
  • public int getColumnCount() {
  • return nomsColonnes.length;
  • }
  • public Object getValueAt(int parm1, int parm2) {
  • return donnees[parm1][parm2];
  • }
  • public int getRowCount() {
  • return donnees.length;
  • }
  • public String getColumnName(int col){
  • return nomsColonnes[col];
  • }
  • public Object[][] getDonnees() {
  • return donnees;
  • }
  • public Object[][] getLignesup() {
  • return lignesup;
  • }
  • public void setValueAt(Object value, int row, int col) {
  • if (typeselection)
  • {
  • int i;
  • for(i=0;i<donnees.length;i++)
  • {
  • if ((donnees[i][nomsColonnes.length-1])==vyes)
  • donnees[i][nomsColonnes.length-1]=vno;
  • }
  • donnees[row][nomsColonnes.length-1]=vyes;
  • fireTableDataChanged();
  • }
  • else
  • {
  • // on peut ajouter d'autres ctrl depend de la façon dont vous gérer les nombres'
  • if (ctrlcol[col].equalsIgnoreCase("Date"))
  • {
  • try {java.sql.Date dd=java.sql.Date.valueOf((String) value);donnees[row][col]=value;fireTableDataChanged();}
  • catch (Exception e){
  • JOptionPane d = new JOptionPane();
  • d.showMessageDialog( d.getParent(),"Erreur de date","Attention !",JOptionPane.ERROR_MESSAGE);
  • }
  • }
  • else
  • {
  • if (value!=null)
  • {
  • if (value.getClass() != getColumnClass(col))
  • {
  • donnees[row][col]=null;
  • }
  • else
  • {
  • donnees[row][col]=value;}
  • }
  • fireTableDataChanged();
  • }
  • }
  • }
  • public void clear () {
  • for (int i = 0;i < nomsColonnes.length;i++)
  • donnees[i]=null;
  • fireTableDataChanged();
  • }
  • public Class getColumnClass(int columnIndex) {
  • return getValueAt(0, columnIndex).getClass();
  • }
  • public boolean isTypeselection() {
  • return typeselection;
  • }
  • public int[] getSizecol() {
  • return sizecol;
  • }
  • 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 );
  • }
  • }
  • public void addEcouteur(final JTable table) {
  • table.getTableHeader().addMouseListener(new MouseAdapter() {
  • public void mouseClicked(MouseEvent event) {
  • if (event.getClickCount() < 2) return;
  • int tableColumn = table.columnAtPoint(event.getPoint());
  • int modelColumn = table.convertColumnIndexToModel(tableColumn);
  • sort(modelColumn);
  • }
  • });
  • }
  • public void sort(int c) {
  • colonneTri = c;
  • Arrays.sort(lignes);
  • copydonnees=new Object [donnees.length][nomsColonnes.length];
  • for (int j=0;j<lignes.length;j++){copydonnees[j]=donnees[lignes[j].index];}
  • for (int j=0;j<lignes.length;j++){donnees[j]=copydonnees[j];}
  • fireTableDataChanged();
  • }
  • public void addligne() {
  • int i;
  • donnees1=new Object[donnees.length+1][nomsColonnes.length];
  • lignesup1=new Object[lignesup.length+1][nomsColonnes.length];
  • for ( i=0;i<donnees.length;i++){donnees1[i]=donnees[i];}
  • for (int j=0;j<nomsColonnes.length;j++)
  • { // dépend de la façon dont vous gérez les nombres (string ou non)
  • if (ctrlcol[j].equalsIgnoreCase("int")) donnees1[i][j]=new Integer(0);
  • if (ctrlcol[j].equalsIgnoreCase("long")) donnees1[i][j]=new Long (0);
  • if (ctrlcol[j].equalsIgnoreCase("float")) donnees1[i][j]=new Float (0);
  • if (ctrlcol[j].equalsIgnoreCase("double")) donnees1[i][j]=new Double (0);
  • if (ctrlcol[j].equalsIgnoreCase("string")) donnees1[i][j]="";
  • if (ctrlcol[j].equalsIgnoreCase("char")) donnees1[i][j]="";
  • if (ctrlcol[j].equalsIgnoreCase("date"))
  • {
  • Date datejour=new Date();
  • SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  • donnees1[i][j]=formatter.format(datejour);
  • }
  • if (ctrlcol[j].equalsIgnoreCase("boolean")) donnees1[i][j]=vyes;
  • }
  • donnees=donnees1;
  • fireTableDataChanged();
  • lignes1 = new Ligne[this.getRowCount()];
  • for (i = 0; i < lignes1.length; i++)
  • {
  • lignes1[i] = new Ligne();
  • lignes1[i].index = i;
  • }
  • for(i=0;i<lignesup.length;i++)
  • {
  • lignesup1[i]=lignesup[i];
  • }
  • lignesup=lignesup1;
  • lignes=lignes1;
  • fireTableDataChanged();
  • }
  • public void suppligne(int lig) {
  • JOptionPane d = new JOptionPane();
  • int rep=d.showConfirmDialog( d.getParent(),"Supprimer une ligne","Voulez vous reelement supprimer cette ligne ?",JOptionPane.OK_CANCEL_OPTION );
  • if (rep!=0) return;
  • int i;
  • donnees1=new Object[donnees.length-1][nomsColonnes.length];
  • int j,h;j=0;h=0;
  • while (lignesup[h][0]!=null)
  • {h=h+1;}
  • lignesup[h]=donnees[lig];
  • for ( i=0;i<donnees.length;i++)
  • {
  • if (i!=lig) {donnees1[j]=donnees[i];j=j+1;}
  • }
  • donnees=donnees1;
  • fireTableDataChanged();
  • lignes1 = new Ligne[this.getRowCount()];
  • for (i = 0; i < lignes1.length; i++)
  • {
  • lignes1[i] = new Ligne();
  • lignes1[i].index = i;
  • }
  • lignes=lignes1;
  • fireTableDataChanged();
  • }
  • public String[] getNomsColonnes() {
  • return nomsColonnes;
  • }
  • }
Utilisation de la jtable :
Déclarer:
    public TableModelPerso T;
    public Tableur TAB;
Appel:
T=new TableModelPerso (
vect,   // de type Object[][] contient les données
Colemploye, //de type String[] contient les entetes de col
false,      // false si maj,true si sélection uniquement
vcoleditable, //de type Boolean[] les colonnes modifiables = true
ctrlcolemploye, //de type String[] classes des col int,long,double,float,string,date,boolean
vsize); // de type int[] taille des colonnes
TAB=new Tableur(T,1); // 0 si interdiction d'ajouter ou supprimer les lignes,1 sinon 
TAB.affiche(this);

// le retour se fait via l'évents windowActivated de votre frame
// récupère les données via T.getDonnees() de type Object[][]
//récupère les lignes supp via T.getLignesup() de type Object[][]

copier ces deux classes

1

import javax.swing.*;
import javax.swing.table.TableModel;
import javax.swing.event.*;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.AbstractTableModel;
import java.awt.Color;
import java.awt.*;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;


class Tableur extends JPanel implements TableModelListener
{
  private Object[][] donnees; 
  private String[] nomsColonnes;
  private JTable table; 
  private TableModel tableur;
  private int[] vsize;
  private javax.swing.JLabel jLabel1;
  private javax.swing.JButton aj1,aj2;
  private TableModelPerso tt;
  private int ajoutsupp;
  private int posilig;

   


  Tableur(TableModelPerso vtablemodelperso,int vajoutsupp)
    {  
      tt=vtablemodelperso;
      ajoutsupp=vajoutsupp;
      this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
      table = new JTable(vtablemodelperso);
      table.setColumnSelectionAllowed(true);
      table.setRowSelectionAllowed(true);
      table.setSelectionBackground(Color.BLUE);
      table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      int[] vsize=vtablemodelperso.getSizecol();
      int tailletot=0;
      for (int i=0;i<vsize.length;i++)
      {
          table.getColumnModel().getColumn(i).setPreferredWidth(vsize[i]);
          if (vsize[i]==0) {table.getColumnModel().getColumn(i).setMinWidth(vsize[i]);table.getColumnModel().getColumn(i).setMaxWidth(vsize[i]);}
          tailletot=tailletot+vsize[i];
      }
      vtablemodelperso.addEcouteur(table);
      table.setPreferredScrollableViewportSize(new Dimension(tailletot+100, 300));
      JScrollPane avecAsc = new JScrollPane(table); 
      jLabel1 = new javax.swing.JLabel();
      jLabel1.setBackground(new java.awt.Color(255, 255, 51));
      jLabel1.setText("Double clic sur une colonne pour trier la table");
      jLabel1.setOpaque(true);
      jLabel1.setName("TITRE");
      jLabel1.setPreferredSize(new java.awt.Dimension(55, 20));
      aj1 = new javax.swing.JButton();
      aj1.setBackground(new java.awt.Color(255, 255, 51));
      aj1.setText("Ajouter une ligne");
      aj1.setPreferredSize(new java.awt.Dimension(150, 25));
      aj2 = new javax.swing.JButton();
      aj2.setBackground(new java.awt.Color(255, 255, 51));
      aj2.setText("Supprimer une ligne");
      aj2.setPreferredSize(new java.awt.Dimension(150, 25));      
      add(jLabel1);
      add(avecAsc);
      table.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
            posilig=(table.rowAtPoint(evt.getPoint()));
            }
        });
      if (!vtablemodelperso.isTypeselection() & ajoutsupp!=0){
          add(aj1);
          aj1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tt.addligne();
            }});
          add(aj2);
          aj2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if (tt.getDonnees().length==0)
                {
                    JOptionPane d = new JOptionPane();                
                    d.showMessageDialog( d.getParent(),"Plus de ligne!","Erreur!",JOptionPane.ERROR_MESSAGE);
                    return;        
                }
                table.changeSelection(posilig,0,false,false);
                for (int k=0;k<tt.getColumnCount();k++)
                {
                    table.changeSelection(posilig,k,false,true);
                }
                tt.suppligne(posilig);
            }});
      }
    }
  public void tableChanged(TableModelEvent e) 
    {                                
   }
  public void affiche( JFrame j,String vtitre)
    {
      final JFrame v=j;
      JFrame monCadre = new JFrame();
      monCadre.setTitle(vtitre);
      monCadre.setContentPane(this);
      monCadre.addWindowListener(new WindowAdapter()
	      {
		public void windowClosing(WindowEvent evt)
		  {
                    v.show();
		  }
	      });
      Insets insets = monCadre.getInsets();
      monCadre.setSize(300 + insets.left + insets.right,125 + insets.top + insets.bottom);
       java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
      monCadre.setBounds((screenSize.width-800)/2, (screenSize.height-600)/2, 800, 600);
      monCadre.pack(); 
      monCadre.setVisible(true);
    }

    public Point getLocation() {
        Point retValue;
        retValue = super.getLocation();
                 System.out.println(retValue);       
        return retValue;
    }
     public String[] getNomsColonnes() {
        return nomsColonnes;
    }
}


2

import javax.swing.table.AbstractTableModel;
import javax.swing.AbstractCellEditor;
import javax.swing.table.TableCellEditor;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.Date;
import java.text.SimpleDateFormat;

 public class TableModelPerso extends AbstractTableModel 
 {
    private Object[][] donnees,donnees1,lignesup,lignesup1,copydonnees; 
    private String[] nomsColonnes;
    private boolean[] colmodifiable;
    private boolean typeselection;
    private String[] ctrlcol;
    private int[] sizecol;
    private Ligne[] lignes,lignes1;
    private int colonneTri;
    private Boolean vyes=new Boolean (true);


    private Boolean vno=new Boolean (false);
    private TableModelPerso model;


   public TableModelPerso (Object[][] vdonnees, String[] vnomsColonnes,boolean vtypeselection,boolean[] vcolmodifiable,String vctrlcol[],int[] vsizecol) {
       
       typeselection=vtypeselection;
       ctrlcol=new String[vctrlcol.length];
       sizecol=new int[vsizecol.length];
       if (typeselection==true){
            donnees=new Object[vdonnees.length][vnomsColonnes.length+1];
            nomsColonnes=new String[vnomsColonnes.length+1];
            nomsColonnes[vnomsColonnes.length]="Sélection";
            colmodifiable=new boolean[vcolmodifiable.length+1];
            colmodifiable[vcolmodifiable.length]=true;
            int i;
            for (i=0;i<donnees.length;i++)
            {    donnees[i][vnomsColonnes.length]=vno; }
            donnees[0][vnomsColonnes.length]=vyes;
        }
        else
        {
            lignesup=new Object[vdonnees.length][vnomsColonnes.length];
            donnees=new Object[vdonnees.length][vnomsColonnes.length];
            nomsColonnes=new String[vnomsColonnes.length];
            colmodifiable=new boolean[vcolmodifiable.length];
        }

        int i,j;
        for (i=0;i<vdonnees.length;i++)
        { 
            for (j=0;j<vnomsColonnes.length;j++)
                {donnees[i][j]=vdonnees[i][j];}
        }
        for (j=0;j<vnomsColonnes.length;j++)
            {
            nomsColonnes[j]=vnomsColonnes[j];
            if (typeselection==true)
                colmodifiable[j]=false;
            else
                colmodifiable[j]=vcolmodifiable[j];
             }
        for (j=0;j<vctrlcol.length;j++)
            {ctrlcol[j]=vctrlcol[j];}
        for (j=0;j<vsizecol.length;j++)
            {sizecol[j]=vsizecol[j];}
        model=this;
        lignes = new Ligne[model.getRowCount()];
        for (i = 0; i < lignes.length; i++) {
            lignes[i] = new Ligne();
            lignes[i].index = i;
            }
        }

public boolean isCellEditable(int row, int col) { 
       
    if (colmodifiable[col]==false) 
        return false;
    else
        return true;
    }
   public int getColumnCount() { 
       return nomsColonnes.length; 
   } 
   public Object getValueAt(int parm1, int parm2) { 
       return donnees[parm1][parm2]; 
       
   } 
   public int getRowCount() { 
       return donnees.length; 
   } 
   public String getColumnName(int col){
     return nomsColonnes[col]; 
   } 
    public Object[][] getDonnees() {
        return donnees;
    }
    public Object[][] getLignesup() {
        return lignesup;
    }
  public void setValueAt(Object value, int row, int col) {
      if (typeselection)
      {  
         int i;
         for(i=0;i<donnees.length;i++)
         {
             if ((donnees[i][nomsColonnes.length-1])==vyes)
                 donnees[i][nomsColonnes.length-1]=vno;
         }
         donnees[row][nomsColonnes.length-1]=vyes;
         fireTableDataChanged();
      }
      else
      {
          // on peut ajouter d'autres ctrl depend de la façon dont vous gérer les nombres'
          if (ctrlcol[col].equalsIgnoreCase("Date"))
            {
              try {java.sql.Date dd=java.sql.Date.valueOf((String) value);donnees[row][col]=value;fireTableDataChanged();}
              catch (Exception e){
                    JOptionPane d = new JOptionPane();
                    d.showMessageDialog( d.getParent(),"Erreur de date","Attention !",JOptionPane.ERROR_MESSAGE);
                                  }
            }
            else
            {
                if (value!=null)
                {
                    if (value.getClass()  != getColumnClass(col))
                    {
                        donnees[row][col]=null;
                    }
                    else
                    {
                        donnees[row][col]=value;}
                    }

                fireTableDataChanged();
              }
          } 
  }
   public void clear () {
     for (int i = 0;i < nomsColonnes.length;i++)
       donnees[i]=null;
     fireTableDataChanged();
   }
    public Class getColumnClass(int columnIndex) {
    return getValueAt(0, columnIndex).getClass();
    }
    public boolean isTypeselection() {
        return typeselection;
    }
    public int[] getSizecol() {
        return sizecol;
    }

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 );
}
}
public void addEcouteur(final JTable table) {
table.getTableHeader().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) {
if (event.getClickCount() < 2) return;
int tableColumn = table.columnAtPoint(event.getPoint());
int modelColumn = table.convertColumnIndexToModel(tableColumn);
sort(modelColumn);
}
});
}
public void sort(int c) {
colonneTri = c;
Arrays.sort(lignes);
copydonnees=new Object [donnees.length][nomsColonnes.length];
for (int j=0;j<lignes.length;j++){copydonnees[j]=donnees[lignes[j].index];}
for (int j=0;j<lignes.length;j++){donnees[j]=copydonnees[j];}
fireTableDataChanged();
}
public void addligne() {
    int i;
    donnees1=new Object[donnees.length+1][nomsColonnes.length];
    lignesup1=new Object[lignesup.length+1][nomsColonnes.length];
    for ( i=0;i<donnees.length;i++){donnees1[i]=donnees[i];}
    for (int j=0;j<nomsColonnes.length;j++)
    {   // dépend de la façon dont vous gérez les nombres (string ou non)
        if (ctrlcol[j].equalsIgnoreCase("int")) donnees1[i][j]=new Integer(0);
        if (ctrlcol[j].equalsIgnoreCase("long")) donnees1[i][j]=new Long (0);
        if (ctrlcol[j].equalsIgnoreCase("float")) donnees1[i][j]=new Float (0);
        if (ctrlcol[j].equalsIgnoreCase("double")) donnees1[i][j]=new Double (0);
        if (ctrlcol[j].equalsIgnoreCase("string")) donnees1[i][j]="";
        if (ctrlcol[j].equalsIgnoreCase("char")) donnees1[i][j]="";
        if (ctrlcol[j].equalsIgnoreCase("date"))
        {
            Date datejour=new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            donnees1[i][j]=formatter.format(datejour);
        }
        if (ctrlcol[j].equalsIgnoreCase("boolean")) donnees1[i][j]=vyes;
        
    }
    donnees=donnees1;
    fireTableDataChanged();
    lignes1 = new Ligne[this.getRowCount()];
    for (i = 0; i < lignes1.length; i++)
    {
            lignes1[i] = new Ligne();
            lignes1[i].index = i;
    }
    for(i=0;i<lignesup.length;i++)
    {
        lignesup1[i]=lignesup[i];
    }
    lignesup=lignesup1;
    lignes=lignes1;        
    fireTableDataChanged();
    } 
public void suppligne(int lig) {
    JOptionPane d = new JOptionPane();
    int rep=d.showConfirmDialog( d.getParent(),"Supprimer une ligne","Voulez vous reelement supprimer cette ligne ?",JOptionPane.OK_CANCEL_OPTION );
    if (rep!=0) return;
    
    int i;
    donnees1=new Object[donnees.length-1][nomsColonnes.length];
    int j,h;j=0;h=0;
    while (lignesup[h][0]!=null)
    {h=h+1;}
    lignesup[h]=donnees[lig];
    for ( i=0;i<donnees.length;i++)
    {
        if (i!=lig) {donnees1[j]=donnees[i];j=j+1;}
    }
    donnees=donnees1;
    fireTableDataChanged();
    lignes1 = new Ligne[this.getRowCount()];
    for (i = 0; i < lignes1.length; i++)
    {
         lignes1[i] = new Ligne();
         lignes1[i].index = i;
    }
    lignes=lignes1;        
    fireTableDataChanged();               
    } 
    public String[] getNomsColonnes() {
        return nomsColonnes;
    }
 }
  

Conclusion

Merci pour vos commentaires, remerciements aux autres codes sur les jtables
 

Historique

29 janvier 2007 15:43:44 :
correction des variables à déclarer prog princip
29 janvier 2007 16:01:22 :
mots clés
29 janvier 2007 23:01:14 :
amélioration
29 janvier 2007 23:52:59 :
Amélioration sizecol à zéro
05 février 2007 19:31:34 :
Récupération des lignes supp, possibilité d'interdire l'ajout ou la suppression de lignes
05 février 2007 19:33:36 :
Amélioration

Commentaires et avis

signaler à un administrateur
Commentaire de Ltaeif le 05/02/2007 19:02:02

Trés jeune homme continue bien

signaler à un administrateur
Commentaire de darradji le 20/11/2007 23:46:13

merci ...

signaler à un administrateur
Commentaire de imedlamiri le 13/11/2008 10:52:16

svp je ne vois pas la méthode main.

signaler à un administrateur
Commentaire de PROMEUF le 21/11/2008 01:42:25

? le main est ton source tu ajoutes ces 2 classes à ton projet

signaler à un administrateur
Commentaire de yasmina13 le 13/01/2009 16:28:31

bonsoir tous
j'ai vue votre programme et sa ma aider dans mon pojet.
bonne continuation.
salutation

signaler à un administrateur
Commentaire de DrSoFtNaF le 02/02/2009 21:42:38

Bonsoir,

J'ai bien compri ce code, mais j'ai une erreur de déclaration, est ce que vous pouvez nous donner un exemple de Main() concret où on peut voir l'utilisation de ces deux classes?

Merci pour le support.

signaler à un administrateur
Commentaire de paypay25 le 27/03/2009 16:34:41

te voila un bou de code pour ton main  DrSoFtNaF
c pas parfait surement mais sa taffiche la Jtable
[code]
import java.awt.Color;

import java.awt.Rectangle;

import javax.swing.JFrame;
import javax.swing.JTable;

public class main {
    
    public main() {
    }

    public static void main(String[] args) {
        main main = new main();
        
        
        Tableur TAB;
        Object[][] donnees = {{"Swing",    "Astral",     "standard",  Color.red,    Boolean.TRUE},

               {"Swing",    "Mistral",    "standard", Color.yellow, Boolean.FALSE},

               {"Gin",      "Oasis",      "standard",Color.blue,   Boolean.FALSE},

               {"Gin",      "boomerang",  "compétition",  Color.green,  Boolean.TRUE},

               {"Advance",  "Omega",      "performance",  Color.cyan,   Boolean.TRUE},
        
          } ;
        

          String[] titreColonnes = { "modèle", "marque", "homologation",

                                     "couleur", "vérifié ?"};
        boolean[] vcoleditable = new boolean[] { true, true, true, true, true};
        
        String[] ctrlcolemploye = { "String", "String", "String","color", "boolean"};
        int[] ctrlcolemp = { 100, 100, 100,100, 100};
      
        TableModelPerso T=new TableModelPerso ( donnees, titreColonnes, true, vcoleditable, ctrlcolemploye, ctrlcolemp ); // de type int[] taille des colonnes
        
        TAB=new Tableur(T,1); // 0 si interdiction d'ajouter ou supprimer les lignes,1 sinon
        
        JFrame fenetre=new JFrame();
        fenetre.setBounds(new Rectangle(0, 0, 600, 700));
        fenetre.setResizable(false);
        
        fenetre.getContentPane().setLayout(null);      
      
        TAB=new Tableur(T,1); // 0 si interdiction d'ajouter ou supprimer les lignes,1 sinon
        TAB.affiche(fenetre,"ma fenetre");
        // le retour se fait via l'évents windowActivated de votre frame
        // récupère les données via T.getDonnees() de type Object[][]
        //récupère les lignes supp via T.getLignesup() de type Object[][]
       // copier ces deux classes
    }
}
[/code]

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

une JTable sous java [ par strikers ] j'ai relier une base de donner a ma JTable et j'ai une colonne Password dans ma Jtable et je s'est pas comment on fais pour qu'il mette des estérixe d gestion commerciale [ par omar2fatnassi ] theme de la gestion est :1- ajout d'un client2- suppression d'un client 3- mise a jour 4- recherche d'un client5- gesion des commandes aux pres des fo Problèmes avec des JTable [ par zarbydigital ] Hello.Je suis en train de developper une applic' avec une JTable et j'aimerai lui mettre un scroller.Je cré une JTable (JTable jTableNom = new JTalbe) bouton delete dans une cellule d'unen JTable [ par empiret ] Bonjour, J'ai une JTable qui contient des lignes. Chaque ligne contient une cellule contenant un bouton 'delete'. Ce bouton sert a supprimer la ligne comment compiler une classe java pour acceder au tri des modificateur,methodes,proprietées.. [ par red_star16 ] J'ai essay&#233; de realiser &#231;a mais je n'ai pas assez d'information sur la compilation des classe.si vous pouvez m'aider je serais&nbsp; tr&#232 Inserer une image dans une case de JTable [ par adakick ] Bonjour, je voulais savoir comment je pourrai mettre une image dans une case de JTable, j'ai essaier sa:&nbsp;&nbsp;for(int i = 0 ; i&lt; data.length Jtable et erreur ! [ par jimmy69 ] Bonjour a tous,J'ai un p'tit souci avec mon application qui ne fait que d'ajouter des composant sur un JFrame&nbsp; !lorsque j'ajoute un jtable et que Les Jtable en Java [ par BookerT ] Je veux creer un Jtable sur netbeans, pour afficher ma bd... j'arrive pas a changer les nombre de colonnes et de lignes de mon Jtable.... si qq1 sait comment faire le tri d'un tableau en java [ par belkhouribchiamajda ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB Comment ajouter des boutons de suppression a chaque ligne d'une JTable? [ par tomkc ] Salut,Je recherche le moyen d'ajouter un bouton d'edition et un bouton de suppression &#224; la fin de chaque ligne d'une JTable. Si quelqu'un&nbsp;po


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.