Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1663 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  tableau dynamique java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tableau dynamique java

n°2123119
morgain63
Posté le 24-01-2012 à 21:44:35  profilanswer
 

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!  :pfff:  :??:  
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  :hello:

mood
Publicité
Posté le 24-01-2012 à 21:44:35  profilanswer
 

n°2123393
seblm2
Posté le 26-01-2012 à 08:23:30  profilanswer
 

Il y aurait énormément de choses à dire sur ton code :

  • en java les noms des packages commencent généralement par une minuscule
  • quand on récupère ton code il ne compile pas : ça n'encourage par les gens à t'aider. Pour le faire compiler, il faut remplacer les occurrences de Application.ProjetDUT.test.tableau par un membre de la classe (je l'ai nommé tableau
  • pas la peine d'implémenter KeyListener
  • TableauDesInvariants.Model.addRow() est bien trop compliqué : la méthode peut être avantageusement réduite en utilisant ArrayUtils.copy()
  • AjoutInvariants a bien trop de membres de classe
  • AjoutInvariants disparaît une fois que l'action a été exécuté en appelant dispose()
  • J'ai ajouté une méthode main() pour que la JFrame soit exécutable et qu'on puisse la tester
  • etc...


Voici une proposition d'implémentation :
 

Code :
  1. package apparence;
  2. import java.awt.BorderLayout;
  3. import java.awt.Dimension;
  4. import java.awt.GridLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.util.Arrays;
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.JTable;
  13. import javax.swing.SwingUtilities;
  14. import javax.swing.table.AbstractTableModel;
  15. public class TableauDesInvariants extends JFrame implements ActionListener {
  16.     private static final long serialVersionUID = -8505921257906274603L;
  17.     private JButton ajouter = new JButton("Ajouter" );
  18.     private JButton modifier = new JButton("Modifier" );
  19.     private Object[][] dataModel = { { "pc1", "ordinateur qui envoie les données" }, { "pc2", "ordi qui les reçoit" } };
  20.     private String[] columnName = { "identifiant de l'invariant", "libellé de l'invariant" };
  21.     Model model = new Model();
  22.     public JTable tableau = new JTable(model);
  23.     private JScrollPane barres_defilement = new JScrollPane(tableau);
  24.     private JPanel boutons = new JPanel();
  25.     class Model extends AbstractTableModel {
  26.         private static final long serialVersionUID = -1740889182135611382L;
  27.         @Override
  28.         public int getColumnCount() {
  29.             return columnName.length;
  30.         }
  31.         @Override
  32.         public int getRowCount() {
  33.             return dataModel.length;
  34.         }
  35.         @Override
  36.         public Object getValueAt(int arg0, int arg1) {
  37.             return dataModel[arg0][arg1];
  38.         }
  39.         @Override
  40.         public String getColumnName(int column) {
  41.             return columnName[column];
  42.         }
  43.         public void modifLigne(Object[] data) {
  44.             int indice = tableau.getSelectedRow();
  45.             if (indice >= 0 && indice < dataModel.length) {
  46.                 dataModel[indice] = data;
  47.                 this.fireTableDataChanged();
  48.             }
  49.         }
  50.         public void addRow(Object[] data) {
  51.             dataModel = Arrays.copyOf(dataModel, dataModel.length + 1);
  52.             dataModel[dataModel.length - 1] = data;
  53.             this.fireTableDataChanged();
  54.         }
  55.     }
  56.     private void miseEnPlace() {
  57.         GridLayout grid = new GridLayout(1, 2);
  58.         this.boutons.setLayout(grid);
  59.         this.boutons.add(ajouter);
  60.         this.boutons.add(modifier);
  61.         this.add(boutons, BorderLayout.SOUTH);
  62.         this.getContentPane().add(barres_defilement, BorderLayout.CENTER);
  63.         super.setDefaultCloseOperation(EXIT_ON_CLOSE);
  64.     }
  65.     public void ecouteur() {
  66.         this.ajouter.addActionListener(this);
  67.         this.modifier.addActionListener(this);
  68.         this.ajouter.setFocusable(false);
  69.         this.modifier.setFocusable(false);
  70.         this.setFocusable(true);
  71.     }
  72.     public TableauDesInvariants(String name) {
  73.         super(name);
  74.         miseEnPlace();
  75.         ecouteur();
  76.     }
  77.     @Override
  78.     public void actionPerformed(ActionEvent event) {
  79.         if (event.getSource() == ajouter) {
  80.             AjoutInvariants ajout = new AjoutInvariants(null, null, this.model);
  81.             ajout.setVisible(true);
  82.             ajout.setMinimumSize(new Dimension(400, 100));
  83.         }
  84.         if (event.getSource() == modifier) {
  85.             int row = this.tableau.getSelectedRow();
  86.             if (row == -1) {
  87.                 return;
  88.             }
  89.             String identifiant = (String) tableau.getValueAt(row, 0);
  90.             String libelle = (String) tableau.getValueAt(row, 1);
  91.             AjoutInvariants ajout = new AjoutInvariants(identifiant, libelle, this.model);
  92.             ajout.setVisible(true);
  93.             ajout.setMinimumSize(new Dimension(400, 100));
  94.         }
  95.     }
  96.     public static void main(String[] args) {
  97.         SwingUtilities.invokeLater(new Runnable() {
  98.             @Override
  99.             public void run() {
  100.                 TableauDesInvariants tableauDesInvariants = new TableauDesInvariants("title" );
  101.                 tableauDesInvariants.setVisible(true);
  102.             }
  103.         });
  104.     }
  105. }


 

Code :
  1. package apparence;
  2. import java.awt.GridBagConstraints;
  3. import java.awt.GridBagLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JTextField;
  10. public class AjoutInvariants extends JFrame implements ActionListener {
  11.     private static final long serialVersionUID = -8037270376315419999L;
  12.     private JTextField id = new JTextField();
  13.     private JTextField libelle = new JTextField();
  14.     private JLabel oldId = new JLabel();
  15.     private JLabel oldLibelle = new JLabel();
  16.     private TableauDesInvariants.Model tableModel;
  17.     private void miseEnPlace() {
  18.         this.setLayout(new GridBagLayout());
  19.         GridBagConstraints cont = new GridBagConstraints();
  20.         cont.weightx = 1.0;
  21.         cont.weighty = 1.0;
  22.         cont.gridheight = 1;
  23.         cont.gridwidth = 1;
  24.         cont.fill = GridBagConstraints.BOTH;
  25.         cont.gridx = 0;
  26.         cont.gridy = 0;
  27.         this.add(new JLabel("anciennes valeurs" ), cont);
  28.         cont.gridy = 1;
  29.         this.add(oldId, cont);
  30.         cont.gridy = 2;
  31.         this.add(oldLibelle, cont);
  32.         cont.gridy = 3;
  33.         cont.gridwidth = 3;
  34.         JButton valider = new JButton("Valider" );
  35.         this.add(valider, cont);
  36.         valider.addActionListener(this);
  37.         cont.gridwidth = 1;
  38.         cont.gridx = 1;
  39.         cont.gridy = 1;
  40.         this.add(new JLabel("identifiant" ), cont);
  41.         cont.gridy = 2;
  42.         this.add(new JLabel("libellé" ), cont);
  43.         cont.gridx = 2;
  44.         cont.gridy = 1;
  45.         this.add(id, cont);
  46.         cont.gridy = 2;
  47.         this.add(libelle, cont);
  48.     }
  49.     public AjoutInvariants(String identifiant, String libelle2, TableauDesInvariants.Model tableModel) {
  50.         super("ajouter ou modifier un invariant" );
  51.         miseEnPlace();
  52.         oldId.setText(identifiant);
  53.         oldLibelle.setText(libelle2);
  54.         this.tableModel = tableModel;
  55.         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  56.     }
  57.     @Override
  58.     public void actionPerformed(ActionEvent e) {
  59.         if (e.getActionCommand() == "Valider" ) {
  60.             Object[] data = { id.getText(), libelle.getText() };
  61.             if (oldId.getText() == null && oldLibelle.getText() == null) {
  62.                 ((TableauDesInvariants.Model) tableModel).addRow(data);
  63.             } else {
  64.                 ((TableauDesInvariants.Model) tableModel).modifLigne(data);
  65.             }
  66.             dispose();
  67.         }
  68.     }
  69. }

n°2123441
morgain63
Posté le 26-01-2012 à 13:34:50  profilanswer
 

merci beaucoup pour ton aide!!! :D
effectivement le main n'est pas dans mon tableau des invariant mais c'est volontaire
je n'ai pas voulu donner une classe de plus pour un main.......
effectivement pour le package je n'ai pas fait attention
et pour le reste je ne savait pas que ces méthodes existaient......
merci encore


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  tableau dynamique java

 

Sujets relatifs
un peu perdu avec les storage class du C en revenant de javawhile et for sur tableau
modification d'un formulaire - tableautableau à double entrée à partir d'une requête
Exécution d'une commande Dos dans un programme Javafonction d'affichage d'un tableau 2 dimensions
Déplacer une clé dans un tableau multidimensionnelPython - Ajout d'éléments dans un tableau de dimension >2
Remplir questionnaire java avec macro excel[java][Algo] Tableau 2 dimensions (dynamique?)
Plus de sujets relatifs à : tableau dynamique java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR