java-sql-interface swing

java-sql-interface swing - Java - Programmation

Marsh Posté le 16-01-2005 à 18:02:10    

Salut à tous. Je suis en train de développer un programme en java qui utilise entre autres une liaion JDBC avec ma BDD mysql,swing et java.io.
 
Description programme:
Je récupère des données sous format NMEA d'un GPS, effectue un hashage ($GPLL) dessus pour en ressortir la position actuelle et les enregistre les valeurs dans la BDD.
En même temps, je rentre les valeurs de mon apareil de mesures dans un BDD. J'effectue ensuite une fusion des tables via la clé date dans une table fusion.
Ensuite, je convertis la table fusion en Object[][].
Lors de la création de l'interface swing, qd l'affichage de fusion est demandé, je cree une Jtable avec ce Object[], qui est ensuite mis dans un JScrollPane.
Problème:

L'affichage marche très bien, mais quand les valeurs de la table fusion de la BDD change, je dois redemander le reaffichage de la JTable. ET ca ne marche pas. J'ai bien essayé le repaint, mais kedalle.
 
Mes Questions:
Est-ce que je dois utiliser un PaintManager, ou il y a une petite commande de merde que j'ai pas trouvé?
Est-ce que je me goure complétement dans la manière de faire et dans ce cas là, est-ce que vous avez des ex d'interface java simple pour BDD, histoire ke je voie commennt ca marche ( et repondez pâs alltheweb, jai esayé, rien de concluant :) )
Et sinon, est-ce que vous avez trouvé des tutaux private secret qqpart sur swing-PaintManager!
 
 
Hesitez pas a balancer n'importe quel remarque classe, ça peut que me faire avancer!

Reply

Marsh Posté le 16-01-2005 à 18:02:10   

Reply

Marsh Posté le 16-01-2005 à 19:39:49    

si tu touches à JTable, je te tue, mais je te fais crever en 3 jours.
 
Tu as un problème de TableModel, je sais pas lequel.
 
Va te renseigner sur MVC (Model View Controller), pour comprendre les bases.

Reply

Marsh Posté le 16-01-2005 à 20:32:57    

nraynaud a écrit :

si tu touches à JTable, je te tue, mais je te fais crever en 3 jours.


ca va pas nan ?? faut arrêter les délires là, hein !!  [:benou]  


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-01-2005 à 20:39:23    

la police de la convivialité à laissé son humour au vestiaire ?
 
largue ta copine et ton poste de modo si c'est pour devenir comme ça. Pis mets-toi au java par la même occasion.

Reply

Marsh Posté le 16-01-2005 à 20:54:06    

c'est tellement naze que je sais pas quoi te répondre ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-01-2005 à 21:06:35    

bof, t'as aucune répartie, c'est tout.

Reply

Marsh Posté le 16-01-2005 à 21:16:06    

ma soluce (ca vaut ce que ca vaut)
 

Code :
  1. import java.util.ArrayList;
  2. import javax.swing.event.EventListenerList;
  3. import javax.swing.event.TableModelEvent;
  4. import javax.swing.event.TableModelListener;
  5. import javax.swing.table.TableModel;
  6. import java.util.EventListener;
  7. public class GUITableModel implements TableModel {
  8.     protected EventListenerList listenerList = new EventListenerList();
  9.     ArrayList columName = new ArrayList();
  10.     ArrayList data;
  11.     int columnCount = 0;
  12.     int rowCount = 0;
  13.     public static final String[] personneHeader = {"Catégorie", "Nom", "Prenom", "Licence", "Poste"
  14.         , "E actuelle", "E ancienne"};
  15.     public static final String[] classementHeader =
  16.         {"Rang", "Nom", "Points", "GoalAverage", "Buts M", "Buts E", "V",
  17.         "N", "D", "Nb joués"};
  18.     public static final String[] matchHeader = {"Domicile", "Extérieur", "Arbitre", "Date",
  19.     "Status", "Score dom", "Score ext"};
  20.     public GUITableModel(ArrayList data, String[] header) {
  21.       for (int i = 0; i < header.length;i++) {
  22.         columName.add(header[i]);
  23.       }
  24.         setData(data);
  25.         columnCount = columName.size();
  26.         //System.out.println("le compte est : " +columnCount);
  27.     }
  28.     public void setData(ArrayList data) {
  29.         this.data = data;
  30.         rowCount = data.size();
  31.         fireTableDataChanged();
  32.     }
  33.     public int getColumnCount() {
  34.         return columnCount;
  35.     }
  36.     public int getRowCount() {
  37.         return rowCount;
  38.     }
  39.     public boolean isCellEditable(int arg0, int arg1) {
  40.         return false;
  41.     }
  42.     public Class getColumnClass(int arg0) {
  43.         return String.class;
  44.     }
  45.     public Object getValueAt(int row, int column) {
  46.         ArrayList targetRow = (ArrayList) data.get(row);
  47.         return targetRow.get(column);
  48.     }
  49.     public void setValueAt(Object arg0, int arg1, int arg2) {
  50.     }
  51.     public String getColumnName(int index) {
  52.         return columName.get(index).toString();
  53.     }
  54. //  Managing Listeners
  55. //
  56.     /**
  57.      * Adds a listener to the list that's notified each time a change
  58.      * to the data model occurs.
  59.      *
  60.      * @param   l       the TableModelListener
  61.      */
  62.     public void addTableModelListener(TableModelListener l) {
  63.     listenerList.add(TableModelListener.class, l);
  64.     }
  65.     /**
  66.      * Removes a listener from the list that's notified each time a
  67.      * change to the data model occurs.
  68.      *
  69.      * @param   l       the TableModelListener
  70.      */
  71.     public void removeTableModelListener(TableModelListener l) {
  72.     listenerList.remove(TableModelListener.class, l);
  73.     }
  74.     /**
  75.      * Returns an array of all the table model listeners
  76.      * registered on this model.
  77.      *
  78.      * @return all of this model's <code>TableModelListener</code>s
  79.      *         or an empty
  80.      *         array if no table model listeners are currently registered
  81.      *
  82.      * @see #addTableModelListener
  83.      * @see #removeTableModelListener
  84.      *
  85.      * @since 1.4
  86.      */
  87.     public TableModelListener[] getTableModelListeners() {
  88.         return (TableModelListener[])listenerList.getListeners(
  89.                 TableModelListener.class);
  90.     }
  91. //
  92. //  Fire methods
  93. //
  94.     /**
  95.      * Notifies all listeners that all cell values in the table's
  96.      * rows may have changed. The number of rows may also have changed
  97.      * and the <code>JTable</code> should redraw the
  98.      * table from scratch. The structure of the table (as in the order of the
  99.      * columns) is assumed to be the same.
  100.      *
  101.      * @see TableModelEvent
  102.      * @see EventListenerList
  103.      * @see javax.swing.JTable#tableChanged(TableModelEvent)
  104.      */
  105.     public void fireTableDataChanged() {
  106.         fireTableChanged(new TableModelEvent(this));
  107.     }
  108.     /**
  109.      * Notifies all listeners that the table's structure has changed.
  110.      * The number of columns in the table, and the names and types of
  111.      * the new columns may be different from the previous state.
  112.      * If the <code>JTable</code> receives this event and its
  113.      * <code>autoCreateColumnsFromModel</code>
  114.      * flag is set it discards any table columns that it had and reallocates
  115.      * default columns in the order they appear in the model. This is the
  116.      * same as calling <code>setModel(TableModel)</code> on the
  117.      * <code>JTable</code>.
  118.      *
  119.      * @see TableModelEvent
  120.      * @see EventListenerList
  121.      */
  122.     public void fireTableStructureChanged() {
  123.         fireTableChanged(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
  124.     }
  125.     /**
  126.      * Notifies all listeners that rows in the range
  127.      * <code>[firstRow, lastRow]</code>, inclusive, have been inserted.
  128.      *
  129.      * @param  firstRow  the first row
  130.      * @param  lastRow   the last row
  131.      *
  132.      * @see TableModelEvent
  133.      * @see EventListenerList
  134.      *
  135.      */
  136.     public void fireTableRowsInserted(int firstRow, int lastRow) {
  137.         fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
  138.                              TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
  139.     }
  140.     /**
  141.      * Notifies all listeners that rows in the range
  142.      * <code>[firstRow, lastRow]</code>, inclusive, have been updated.
  143.      *
  144.      * @param firstRow  the first row
  145.      * @param lastRow   the last row
  146.      *
  147.      * @see TableModelEvent
  148.      * @see EventListenerList
  149.      */
  150.     public void fireTableRowsUpdated(int firstRow, int lastRow) {
  151.         fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
  152.                              TableModelEvent.ALL_COLUMNS, TableModelEvent.UPDATE));
  153.     }
  154.     /**
  155.      * Notifies all listeners that rows in the range
  156.      * <code>[firstRow, lastRow]</code>, inclusive, have been deleted.
  157.      *
  158.      * @param firstRow  the first row
  159.      * @param lastRow   the last row
  160.      *
  161.      * @see TableModelEvent
  162.      * @see EventListenerList
  163.      */
  164.     public void fireTableRowsDeleted(int firstRow, int lastRow) {
  165.         fireTableChanged(new TableModelEvent(this, firstRow, lastRow,
  166.                              TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE));
  167.     }
  168.     /**
  169.      * Notifies all listeners that the value of the cell at
  170.      * <code>[row, column]</code> has been updated.
  171.      *
  172.      * @param row  row of cell which has been updated
  173.      * @param column  column of cell which has been updated
  174.      * @see TableModelEvent
  175.      * @see EventListenerList
  176.      */
  177.     public void fireTableCellUpdated(int row, int column) {
  178.         fireTableChanged(new TableModelEvent(this, row, row, column));
  179.     }
  180.     /**
  181.      * Forwards the given notification event to all
  182.      * <code>TableModelListeners</code> that registered
  183.      * themselves as listeners for this table model.
  184.      *
  185.      * @param e  the event to be forwarded
  186.      *
  187.      * @see #addTableModelListener
  188.      * @see TableModelEvent
  189.      * @see EventListenerList
  190.      */
  191.     public void fireTableChanged(TableModelEvent e) {
  192.     // Guaranteed to return a non-null array
  193.     Object[] listeners = listenerList.getListenerList();
  194.     // Process the listeners last to first, notifying
  195.     // those that are interested in this event
  196.     for (int i = listeners.length-2; i>=0; i-=2) {
  197.         if (listeners[i]==TableModelListener.class) {
  198.         ((TableModelListener)listeners[i+1]).tableChanged(e);
  199.         }
  200.     }
  201.     }
  202.     /**
  203.      * Returns an array of all the objects currently registered
  204.      * as <code><em>Foo</em>Listener</code>s
  205.      * upon this <code>AbstractTableModel</code>.
  206.      * <code><em>Foo</em>Listener</code>s are registered using the
  207.      * <code>add<em>Foo</em>Listener</code> method.
  208.      *
  209.      * <p>
  210.      *
  211.      * You can specify the <code>listenerType</code> argument
  212.      * with a class literal,
  213.      * such as
  214.      * <code><em>Foo</em>Listener.class</code>.
  215.      * For example, you can query a
  216.      * model <code>m</code>
  217.      * for its table model listeners with the following code:
  218.      *
  219.      * <pre>TableModelListener[] tmls = (TableModelListener[])(m.getListeners(TableModelListener.class));</pre>
  220.      *
  221.      * If no such listeners exist, this method returns an empty array.
  222.      *
  223.      * @param listenerType the type of listeners requested; this parameter
  224.      *          should specify an interface that descends from
  225.      *          <code>java.util.EventListener</code>
  226.      * @return an array of all objects registered as
  227.      *          <code><em>Foo</em>Listener</code>s on this component,
  228.      *          or an empty array if no such
  229.      *          listeners have been added
  230.      * @exception ClassCastException if <code>listenerType</code>
  231.      *          doesn't specify a class or interface that implements
  232.      *          <code>java.util.EventListener</code>
  233.      *
  234.      * @see #getTableModelListeners
  235.      *
  236.      * @since 1.3
  237.      */
  238.     public EventListener[] getListeners(Class listenerType) {
  239.         return listenerList.getListeners(listenerType);
  240.         }
  241. }


 
tu appelle un setData() avec un nouveau tableau de tableau d'objet (dans mon exemple g foutu une arraylist d'arraylist, mais tu converti au besoin)
 
tt la farce est faite dans setData, et le fait que tt les méthodes du modèle récupèrent ce qui se passe dans data


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:17:36    

comment il essaie de recoller les pots cassés lui [:god]

Reply

Marsh Posté le 16-01-2005 à 21:21:01    

non j'ai juste eu le meme pb...autant la réponse de nraynaud me choque pas le connaissant, autant je vois pas pkoi le posteur qui a posté sa question proprement aurait pas droit à une réponse...[:spamafote]


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:21:27    

Jubi > y'a pas un DefaultTableModel que tu peux hériter pour faire moins de code ? il fait pas ce qu'il veut ? (réelle question, j'ai la flemme d'aller dans la javadoc)

Reply

Marsh Posté le 16-01-2005 à 21:21:27   

Reply

Marsh Posté le 16-01-2005 à 21:26:19    

-->réelle réponse : j'en ai pas la moindre idée...c issue d'un projet codé à la va comme je te pousse...
 
Y'a un http://java.sun.com/j2se/1.4.2/doc [...] Model.html
et un  
http://java.sun.com/j2se/1.4.2/doc [...] Model.html
 
dont g pas forcément regardé les différences...(le code en dessous avec les commentaires javadoc, c un copier//coller rapide des sources du Default je crois)
 
==>le truc c de fire un      fireTableDataChanged(); qui lui force le refresh (y faut peut etre un pack() après dans la GUI, mais c pas forcé il me semble)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:30:06    

non, le pack() c'est interdit !
 
oué, j'aime bien avoir les fireBidule et les addMchinListeners tout faits, je me dis qu'il font ça mieux que moi, et qu'il peuvent changer d'avis dans le futur (le stockage des listeners est un point critique dans les performances).

Reply

Marsh Posté le 16-01-2005 à 21:33:53    

-->si pack() est interdit tu fais un refresh comment ? en plus pack ca force les composant à se redessiner avec la taille qu'ils doivent avoir...
 
--> faudrait voir, mon exemple marche peut etre si on sous classe le defaultTableModel et qu'on surcharge tt les op de bases sur le model... surtout le getValueAt


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:39:35    

TU ne fais pas de refresh.
 
le TableModel prévient le JTable que ses données ont été modifiées, c'est au JTable d'en tirer les conséquences et d'entreprendre les actions appropriées. Et là ça peut être un bordel complet parce qu'il peut décider de ne redessiner que quelques cellules, de refaire du calcul de layout, etc.
 
C'est du MVC de base.

Reply

Marsh Posté le 16-01-2005 à 21:43:01    

oui mais si le tableau change de dimension suite à ce refresh...ben ta fenetre de base est plus assez grande pour l'afficher correct ??
 
comment tu fais que ton tableau notifie son container que son viewport a changé ? y'a moyen qu'un composant puisse prévenir son conteneur / le gestionnaire de layout de se containeur de redessiner le bouzin ?


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:43:30    

oops : petit oubli : mon tableModel suppose que tt ce qui y entre c des string (ct le cas dans mon appli)


Message édité par Jubijub le 16-01-2005 à 21:43:39

---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 16-01-2005 à 21:59:49    

Jubijub a écrit :

oui mais si le tableau change de dimension suite à ce refresh...ben ta fenetre de base est plus assez grande pour l'afficher correct ??
 
comment tu fais que ton tableau notifie son container que son viewport a changé ? y'a moyen qu'un composant puisse prévenir son conteneur / le gestionnaire de layout de se containeur de redessiner le bouzin ?


 
Il prévient le layoutManager que ses preferedSize ont changé. Le layoutManager se démerde avec son problème.
 
Par contre, je te rappelle qu'en général les JTable sont dans des JScrollPane (et sinon on voit pas les titres des colones) et donc ça peut dégueuler sans pb.
 
les pack() c'est sur les JFrame, et ça sert à changer la taille extérieure de la fenêtre. Si le fait d'ajouter une ligne dans un tableau me modifie le placement et la taille de mes fenetres sur mon bureau, ils ont pas fini de m'entendre gueuler comme un putoi.

Reply

Marsh Posté le 17-01-2005 à 11:32:33    

je dois avouer que dans mon projet g du coder mes tailles de fenetre en dur...parce que sinon la première fois le pack() faisait une fenetre trop petite pour afficher le tableau...et g jamais trouvé pkoi...du coup je forcais une taille en dur, et je rappellais pack, qui bizarrement à la seconde fournée fonctionnait proprement..c moche mais bon :/


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 18-01-2005 à 18:31:42    

Aïe, ok, ça se complique pas mal. Je croyais que je pouvais coder des trucs simple sans passer par les models. Bon, va falloir que je m'y mette alors.
En tt cas, merci pour toutes ces réponses!

Reply

Marsh Posté le 18-01-2005 à 18:42:54    

heu, c'est justement plus simple de n'utiliser que des modèles (mais effectivement, pour une raison que j'ignore ça parraît plus compliqué aux débutants)

Reply

Marsh Posté le 18-01-2005 à 18:45:04    

parce que ça fait un truc de plus à encaisser, tiens.

Reply

Marsh Posté le 18-01-2005 à 18:47:23    

ben c'est du business et de l'observateur.

Reply

Marsh Posté le 18-01-2005 à 18:48:16    

ben oui.
des choses pas évidentes pour un débutant.

Reply

Marsh Posté le 18-01-2005 à 18:49:27    

Sinon, une petite question subsidiaire. Vous en pensez quoi, j'ai mis cette JInternalFrame (qui contient donc l'affichage du tableau d'objet) dans une classe à part de la JFrame principale. Cette classe est appelée lors de l'initialisation de l'interface. Je la laisse à part pour que ce soit plus lisible, ou je mets toutes les interface dans la meme classe, pour eviter des pbs?

Reply

Marsh Posté le 19-01-2005 à 08:55:57    

crozet a écrit :

ou je mets toutes les interface dans la meme classe, pour eviter des pbs?


java c'est pas vb (quoi que meme dans vb t'as un fichier par form)

Reply

Marsh Posté le 19-01-2005 à 08:57:37    

nraynaud a écrit :

heu, c'est justement plus simple de n'utiliser que des modèles (mais effectivement, pour une raison que j'ignore ça parraît plus compliqué aux débutants)


je suis pas d'accord, non
c'est plus complique ET ca implique de pisser bcp plus de lignes de code

Reply

Marsh Posté le 19-01-2005 à 09:00:46    

beemer > tu prends quoi comme dope ?

Reply

Marsh Posté le 19-01-2005 à 09:16:55    

nraynaud a écrit :

beemer > tu prends quoi comme dope ?

ca c'est une reponse inteligente  :lol:  
regarde un peu la soluce de Jubijub, ca te semble pas abuse pour rafraichir un tableau? pour quoi pas faire un LabelModel ou TextModel avec 2-3 listeners pour changer le text d'un label ou d'une zone de saisie  :heink:  
 
PS: d'ailleurs parlant de MVC, JTable met a dispo un constructeur (data[][], column[]) mais pas de setData : ca te semble coherent? :D

Reply

Marsh Posté le 19-01-2005 à 11:27:54    

beemer > tu es vraiment en forme.
 
PS : oui.

Reply

Marsh Posté le 19-01-2005 à 11:35:24    

nraynaud a écrit :

beemer > tu es vraiment en forme.
 
PS : oui.


ok gars

Reply

Marsh Posté le 19-01-2005 à 11:46:42    

Code :
  1. class ArrayTableModel extends AbstractTableModel {
  2.   private Object[][] data = new Object[0][0];
  3.   public int getRowCount() {
  4.     return data.length;
  5.   }
  6.   public int getColumnCount(){
  7.     return data.length > 0 ? data[0].length : 0;
  8.   }
  9.  
  10.   public Object getValueAt(int row, int column) {
  11.     return data[row][column];
  12.   }
  13.   public void setData(Object[][] data) {
  14.     this.data = data;
  15.     fireTableDataChanged();
  16.   }
  17. }


Message édité par nraynaud le 19-01-2005 à 11:46:55
Reply

Marsh Posté le 19-01-2005 à 11:52:57    

nraynaud a écrit :

Code :
  1. class ArrayTableModel extends AbstractTableModel {
  2.   private Object[][] data = new Object[0][0];
  3.   public int getRowCount() {
  4.     return data.length;
  5.   }
  6.   public int getColumnCount(){
  7.     return data.length > 0 ? data[0].length : 0;
  8.   }
  9.  
  10.   public Object getValueAt(int row, int column) {
  11.     return data[row][column];
  12.   }
  13.   public void setData(Object[][] data) {
  14.     this.data = data;
  15.     fireTableDataChanged();
  16.   }
  17. }



c'est toujours ca de lignes en plus pour un gars qui veut seulement faire un setData(newdata) sur un tableau qui a toutes les props par defaut...chose qui marche d'ailleurs tres bien la 1ere fois avec le constructeur de data et columnNames
 
si tu veux faire un truc plus chiade je suis d'accord a user et abuser de models et de renderers mais pour un truc simple c'est casse couilles
 
a la limite je dirais rien s'il y avait pas de constructeur Jtable a partir de donnees, mais uniquement des models

Reply

Marsh Posté le 19-01-2005 à 13:49:13    

si tu lisais proprement la doc, tu saurais que setData c une méthode de mon cru, qui n'existe pas dans le default ni dans l'abstract model...
 
 
avec ta méthode, il te faut recréer un modèle à chaque fois, puis le réaffecter...moi je récupère mon modèle, et je le MAJ
 
Je précise aussi que derrière j'avais une base de données Objet, et que j'appellais des rafraichissements fréquement...et je pense que c bcp plus optimisé d'utiliser les méchanismes de refresh du model, qui ne repeint donc que ce qui a réellement changé dans le tableau, plutot que l'overhead de changer de modèle, ce qui implique refaire les modèles de colonnes et de cellule, alors qu'ils ne changent pas...
 
donc ta méthode est sale, et comme l'a montré nraynaud, mon code est long parce que g copié coller des bouts de modèles...mais en extendant proprement abstractModel, ca prend 20 lignes...
 
du coup c pas trop lourd, et c terriblement plus propre, et plus extensible (amuse toi plus en détail avec des tableaux, et tu verras qu'en fait il te faut 3 modèles persos si tu veux faire des trucs hors des sentiers)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 19-01-2005 à 14:19:28    

c'est vrai aussi que plutot que d'avoir un constructor de JTable avec un Object[][], ca aurait été tout aussi simple qu'il fournisse plutot un ArrayTableModel ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 19-01-2005 à 18:58:18    

oui c clair...c un peu archaique le Object[][]...
 
ca aurait aussi été intellignet de permettre de changer les données du modèle facilement...mon setData() quoi...

Reply

Marsh Posté le 19-01-2005 à 19:09:19    

d'un autre coté, dans un vrai cas de figure et pas un test d'étudiant, tu vas rarement avoir un Object[][] pour representer ton domain model... me semble que t'auras une Collection<Bidule> ou une Bidule[] quoi...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 19-01-2005 à 19:23:47    

dans ce cas, autant ne pas mettre le constructeur avec le Object[][] [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 19-01-2005 à 19:37:58    

ce serait mieux avec ArrayList ou Vector...ou meme avec une collection...
 
mais bcp de composant swing ont un constructeur où on peut passer le contenu du modèle avec

Reply

Marsh Posté le 19-01-2005 à 19:54:27    

benou a écrit :

dans ce cas, autant ne pas mettre le constructeur avec le Object[][] [:spamafote]


bah ça permet de prototyper/tutorer vite fait [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 19-01-2005 à 21:14:10    

ca existe aussi avec Vector ...  
m'enfin bref, ceux qui ont compris, ont deja compris
 
the real -- : ca cert a quoi de prototyper quoi que ce soit si tu peux pas l'utiliser apres?!
 
jubijub : bcp (la plupart meme) de compos swing permettent aussi de changer les donnes du modele via le viewer


Message édité par beemer le 19-01-2005 à 21:15:22
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed