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 :

[SWING] Jtable vers JTable???


Sujet :

Composants Java

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut [SWING] Jtable vers JTable???
    Bonjour à tous!
    Alors j'ai un petit soucis pour mon interface... je voudrais muter des données d'une JTable vers une autre JTable grâce à un écouteur sur un bouton! Voici une capture d'écran de mon interface pour que vous compreniez mieux ce que je veux faire:



    Donc je voudrais que, en sélectionnant une ligne de ma table1, cette donnée s'affiche dans ma table2 tout en disparaissant de ma table1.

    J'ai d'ores et déjà utilisé des choses comme ce qui suit mais ça ne marche pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (maTable1.isCellSelected(0,i)){
    	        	System.out.println("truc");
    	        	Object obj = maTable1.getValueAt(0,i);
    	        	System.out.println(obj);
    	        	maTable2.setValueAt(obj,0,j);
    	        }
    Le tout étant situé dans une boucle et "j" représente la première cellule vide ma table2!

    Si quelqu'un a une idée de la façon de procéder, je suis preneur!
    Merci d'avance et bonne journée à tous!

    Romain

  2. #2
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Je pense qu'il serait mieux que tu utilises un TableModel.
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  3. #3
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    C'est ce que je fais... j'ai utilisé ça:

  4. #4
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Ouais mais pour ajouter et supprimer...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    	public void addRecord(String name) {
    		model.addRow(new Object[] { name});
    	}//
     
    	/**
             * A modifier pour toi
             */
    	public void clear() {
    		while (model.getRowCount() > 0)
    			model.removeRow(model.getRowCount() - 1);
    	}//
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    Faut que je fasse quoi avec ça? Que je l'ajoute à ma classe MyTableModel?

    J'ai créer mes deux tables de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] columnNames = {"Concepts"};
    Object[][] data1 = {
    			    {"Concept1"},
    			    {"Concept2"},
    			    {"Concept3"}};
    maTable1 = new JTable(new MyTableModel(data1, columnNames));
    JScrollPane scrollPane1 = new JScrollPane(maTable1);
    Object[][] data2 = {};
    maTable2 = new JTable(new MyTableModel(data2, columnNames));

    Pour info voici ma classe MyTableModel:
    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
    import javax.swing.table.AbstractTableModel;
     
    class MyTableModel extends AbstractTableModel {
    	private boolean DEBUG = false;
    	public Object[][] data;
    	public String[] columnNames;
     
    	public MyTableModel (Object[][] dat, String[] colName){
    		super();
    		this.data = dat;
    		this.columnNames = colName;
    	}
     
        public int getColumnCount() {
            return columnNames.length;
        }
     
        public int getRowCount() {
            return data.length;
        }
     
        public String getColumnName(int col) {
            return columnNames[col];
        }
     
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
     
        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
     
        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }
     
        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }
     
            data[row][col] = value;
            fireTableCellUpdated(row, col);
     
            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }
     
        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();
     
            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

  6. #6
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    En fait, quand je teste tout ça il me met une erreur sur la méthode setValueAt de la classe MyTableModel mais je ne vois pas pourquoi! Quelqu'un peut m'aider?

  7. #7
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    Je crois que j'ai trouvé mon erreur, j'essaie d'insérer une donnée dans une cellule qui n'existe pas encore... comment faire pour rajouter une ligne à une JTable?

  8. #8
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Tu peux donner l'erreur que tu as avec ton setValueAt?

  9. #9
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    Voilà mon erreur:
    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
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
    	at java.util.Vector.elementAt(Unknown Source)
    	at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
    	at javax.swing.JTable.convertColumnIndexToModel(Unknown Source)
    	at javax.swing.JTable.setValueAt(Unknown Source)
    	at src.myDialogue$MonEcouteurTransfer1.actionPerformed(myDialogue.java:359)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    je pense que ça vient du fait que ma JTable n'est pas assez grande... il faudrait que j'ajoute déjà une cellule et que après dans cette cellule, j'ajoute mon objet mais je ne vois pas comment faire!

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Comme ta deuxième JTable a une grandeur variable, le mieux serait de remplacer le tableau par une collection et donc de modifier le modele en conséquence

  11. #11
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Pour rajouter des données dynamiquement dans ton modèle de tablea, il ne faut pas utiliser de tableau statique ( object [][] datas ). Utilise plutot une ArrayList d'ArrayList, ce composant contient déjà les méthodes qui t'intéressent :
    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
     
    private MyTable extends AbstractTableModel{
       private List<List> datas;
     
       public MyTable(object [][] datas){
          this.datas=new ArrayList<List>(datas.length);
          for(int i=0;i<datas.length;i++){
              this.datas.add(new ArrayList<monTypeDObjet>);
                for(int j=0;j<datas[i].length;j++){
                   this.datas.get(i).add(datas[i][j]);
                }
              }
          }
       }
     
       public void addLine(Object [] line){
          this.datas.add(new ArrayList(line));
       }
    }
    ps mon code n'a pas été testé et écrit à la "barbare", enfin c'est juste pour te donner un apperçu sur la méthode de créer ton propre tableModel avec un conteneur dynamique.

  12. #12
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Sinon je pense que la solution t'a deja ete donnee par sozie9372, tu applique un DefaultTableModel à ta JTable et tu lui lui ajoute une ligne a chaque fois que l'utilisateur choisit un "concept" avec la methode addRow. Je n'ai jamais essaye mais ca me semble correct.

  13. #13
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Re !

    Excuse moi pour le manque d'explication...
    Voila une classe qui est prête à l'emploi...
    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
     
    public class DecConverterFileTable extends JPanel {
    	//
     
    	private String title;
     
    	private DefaultTableModel model;
     
    	private JLabel ltitle;
     
    	private JScrollPane scroll;
     
    	private JTable table;
     
    	// 
    	/** Creates new form DecConverterFileTable */
    	public DecConverterFileTable(String title) {
    		this.title = title;
    		initComponents();
    	}
     
    	/**
             * This method is called from within the constructor to initialize the form.
             */
    	private void initComponents() {
    		scroll = new JScrollPane();
     
    		ltitle = new JLabel(title);
    // defines the model
    		model = new DefaultTableModel() {
    // The 2 columns can't be edited
    			boolean[] canEdit = new boolean[] { false, false };
    // redefined method
    			public boolean isCellEditable(int rowIndex, int columnIndex) {
    				return canEdit[columnIndex];
    			}
    		};
    		table = new JTable(model);
    		table.setGridColor(new java.awt.Color(255, 255, 255));
    // add 2 columns to the table
    		model.addColumn("Name");
    		model.addColumn("Path");
     
    		setLayout(new java.awt.BorderLayout(5, 5));
    		scroll.setViewportView(table);
     
    		add(scroll, java.awt.BorderLayout.CENTER);
     
    		ltitle.setHorizontalAlignment(SwingConstants.CENTER);
    		add(ltitle, java.awt.BorderLayout.NORTH);
                    /* test */
    		for (int i = 0; i < 40; i++) {
    			addRecord("nom" + i, "path" + i);
    		}
     
    	}//
     /** To add a row to the model */
    	public void addRecord(String name, String path) {
    		model.addRow(new Object[] { name, path });
    	}//
     
    	/**
             * To clear the table
             */
    	public void clear() {
    		while (model.getRowCount() > 0)
    			model.removeRow(model.getRowCount() - 1);
    	}//
    }
    Le fait de redéfinir le model me permet d'ajouter et de supprimer des éléments de la table comme bon me semble... Je pense que ce petit bout de code devrait éclairer ta lanterne
    +++
    Ju
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  14. #14
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 55
    Points
    55
    Par défaut
    Meric beaucoup à vous tous...
    J'ai pris ta solution sozie9372, ça a l'air de fort bien marché!
    Encore merci à tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Export Swing JTable vers Excel
    Par m3allem001 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 08/11/2013, 16h09
  2. [Swing] Afficher une JTable speciale en java
    Par benssj5 dans le forum Composants
    Réponses: 6
    Dernier message: 12/03/2013, 20h21
  3. [SWING] Ma table JTABLE n'est pas éditable
    Par Dahu dans le forum Composants
    Réponses: 7
    Dernier message: 06/04/2006, 11h22
  4. Transférer les données d'une JTable vers une autre
    Par rollbich dans le forum Composants
    Réponses: 4
    Dernier message: 19/01/2006, 23h22
  5. [SWING] remplir une jtable avec une matrice de double
    Par Psykorel dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2006, 14h14

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