Forum Programmation.java tableau Dynamique

Posté par .
Tags :
1
24
jan.
2012

Bonjour à tous,
je suis en train de créer une application pour l'entreprise d'un membre de ma famille qui contient 4 ou 5 tableaux (sur 7 ou 8 fenêtres) pour l'instant je n'en ai fait qu'un mais ils sont tous sur le même modèle (et les destinataire préfère utiliser des tableaux.....)
voici donc 3 semaines que je galère avec ce tableau!
il doit être dynamique, avec possibilité d'ajouter ou de modifier une ligne via une seconde fenêtre
voici le code de la fenêtre principale
'''java
package Apparence;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import application.ProjetDUT;

public class TableauDesInvariants extends JFrame implements ActionListener, KeyListener
{
private JButton ajouter = new JButton("Ajouter");
private JButton modifier = new JButton("Modifier");
private Object[][] dataModel = {{"pc1","ordinateur qui envoie les données"},
{"pc2","ordi qui les reçoit"}};
private String[] columnName = {"identifiant de l'invariant","libellé de l'invariant"};
Model model = new Model(dataModel,columnName);
public class Model extends AbstractTableModel
{
Object[][] data;
String[] titres;
public Model(Object[][] dataModel, String[] columnName)
{
this.data=dataModel;
this.titres=columnName;
}
@Override
public int getColumnCount()
{
return this.titres.length;
}
@Override
public int getRowCount()
{
return this.data.length;
}
@Override
public Object getValueAt(int arg0, int arg1)
{
return this.data[arg0][arg1];
}

    public void modifLigne(Object[] data)
    {
        int indice=ProjetDUT.test.tableau.getSelectedRow();
        this.data[indice]=data;
        this.fireTableDataChanged();
    }

    public void addRow(Object[] data)
    {
        int indice=0;
        Object[][] temp = this.data;
        int nbLignes=this.getRowCount();
        int nbCol=this.getColumnCount();
        this.data=new Object[nbLignes+1][nbCol];
        for (Object[] value : temp)
        {
            this.data[indice++]=value;
        }
        this.data[indice]=data;
        temp=null;
        this.fireTableDataChanged();
    }
}
public JTable tableau = new JTable(model);
private JScrollPane barres_defilement = new JScrollPane(tableau);
private JPanel boutons = new JPanel();

private void miseEnPlace()
{
    GridLayout grid = new GridLayout(1,2);
    this.boutons.setLayout(grid);
    this.boutons.add(ajouter);
    this.boutons.add(modifier);
    this.add(boutons,BorderLayout.SOUTH);
    this.getContentPane().add(barres_defilement,BorderLayout.CENTER);
}

public void ecouteur()
{
    this.ajouter.addActionListener(this);
    this.modifier.addActionListener(this);
    this.addKeyListener(this);
    this.ajouter.setFocusable(false);
    this.modifier.setFocusable(false);
    this.setFocusable(true);
}

public TableauDesInvariants (String name)
{
    super(name);
    miseEnPlace();
    ecouteur();
}

@Override
public void keyPressed(KeyEvent e) 
{
    // TODO Auto-generated method stub

}

@Override
public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void actionPerformed(ActionEvent arg0) 
{
    if (arg0.getSource()==ajouter)
    {
        int row=this.tableau.getSelectedRow();
        AjoutInvariants ajout = new AjoutInvariants(null,null);
        ajout.setVisible(true);
        ajout.setMinimumSize(new Dimension(400,100));
    }
    if (arg0.getSource()==modifier)
    {
        int row=this.tableau.getSelectedRow();
        Object identifiant=tableau.getValueAt(row, 0);
        Object libelle=tableau.getValueAt(row, 1);
        AjoutInvariants ajout = new AjoutInvariants(identifiant,libelle);
        ajout.setVisible(true);
        ajout.setMinimumSize(new Dimension(400,100));
    }
}

}
'''

je ne comprend pas non plus pourquoi mais depuis que j'ai placé les méthodes addRow() et modifLigne() dans la classe Model, je n'ai plus le nom de mes colonnes qui s'affiche....... et si je les met dans la classe TableauDesInvariants, j'ai d'énormes exceptions et impossible d'utiliser la fonction de mise à jour pour mon tableau..... o_O

'''java
package Apparence;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

import application.ProjetDUT;

public class AjoutInvariants extends JFrame implements ActionListener, KeyListener
{
private JButton valider = new JButton("Valider");
private JTextField id = new JTextField();
private JTextField libelle = new JTextField();
private JLabel iD = new JLabel("identifiant");
private JLabel lIbelle = new JLabel("libellé");
private JLabel oldValues = new JLabel("anciennes valeurs");
private JLabel oldId = new JLabel();
private JLabel oldLibelle = new JLabel();

private void miseEnPlace()
{
    this.setLayout(new GridBagLayout());
    GridBagConstraints cont=new GridBagConstraints();
    cont.weightx=1.0;
    cont.weighty=1.0;
    cont.gridheight=1;
    cont.gridwidth=1;
    cont.fill=GridBagConstraints.BOTH;
    cont.gridx=0;
    cont.gridy=0;
    this.add(oldValues,cont);
    cont.gridy=1;
    this.add(oldId,cont);
    cont.gridy=2;
    this.add(oldLibelle,cont);
    cont.gridy=3;
    cont.gridwidth=3;
    this.add(valider,cont);
    cont.gridwidth=1;
    cont.gridx=1;
    cont.gridy=1;
    this.add(iD,cont);
    cont.gridy=2;
    this.add(lIbelle,cont);
    cont.gridx=2;
    cont.gridy=1;
    this.add(id,cont);
    cont.gridy=2;
    this.add(libelle,cont);
}

public AjoutInvariants(Object identifiant,Object libelle2)
{
    super("ajouter ou modifier un invariant");
    miseEnPlace();
    oldId.setText((String) identifiant);
    oldLibelle.setText((String)libelle2);
}

@Override
public void keyPressed(KeyEvent arg0) 
{
    // TODO Auto-generated method stub

}

@Override
public void keyReleased(KeyEvent arg0) 
{
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent arg0) 
{
    // TODO Auto-generated method stub

}

@Override
public void actionPerformed(ActionEvent e) 
{
    if (oldId==null && oldLibelle==null)
    {
        if (e.getSource()=="valider")
        {
            Object[] data={this.getid(),this.getlibelle()};
            ((DefaultTableModel)ProjetDUT.test.tableau.getModel()).addRow(data);
        }
    }
    /**if (oldId!=null && oldLibelle!=null)
    {
        if (e.getSource()=="valider")
        {
            Object[] data={this.getid(),this.getlibelle()};
            ((AbstractTableModel)ProjetDUT.test.tableau.getModel()).modifLigne(data);
        }
    }*/
}

public Object getid()
{
    return id;
}

public Object getlibelle()
{
    return libelle;
}

}
'''

pour l'instant le bouton valider ne ferme pas la fenêtre mais je pense pouvoir m'en débrouiller

merci d'avance à tous pour votre aide

  • # Re:

    Posté par . Évalué à 0.

    Salut,

    A propos du nom des colonnes de la fenêtre principale, tu dois redéfinir la méthode 'getColumnName' de ta classe 'Model':

    public String getColumnName(int column) {
      return titres[column];
    }
    
    

    A propos de l'ajout ou la modification d'une ligne, ta fonction 'actionPerformed' de ta classe 'AjoutInvariants' tente de mettre à jour un modèle de donnée différent de celui de ta fenêtre principale :

    ((DefaultTableModel) ProjetDUT.test.tableau.getModel()).addRow(data);
    
    

    tente de mettre à jour la variable de classe 'TableauDesInvariants'
    Model model = new Model(dataModel, columnName);
    
    

    Ça ne risque pas de fonctionner :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.