Bonjour à tous,
je crée une application pour la société d'un membre de ma famille, celle-ci contient pas mal de tableau et cette personne m'a expressément demandé des tableaux
comme ils sont tous à peu près similaires je n'ai ai fait qu'un seul pour l'instant
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));
}
}
}
[/java]
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
et voici le code de la seconde fenêtre
[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;
}
}
[/java]
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