Es qu'il existe une fonction qui permet de redessiner un élément graphique autre que repaint() qui ne marche pas !
En fait, j'ai un tableau qui ne sait mets pas à jour,
un JXTable dans lequel il y a un calcul !
Si vous avez un idée ?
Version imprimable
Es qu'il existe une fonction qui permet de redessiner un élément graphique autre que repaint() qui ne marche pas !
En fait, j'ai un tableau qui ne sait mets pas à jour,
un JXTable dans lequel il y a un calcul !
Si vous avez un idée ?
Salut,
j'ai aussi eu des problèmes avec repaint, la seule solution que j'ai trouvé (je ne sais d'ailleurs toujours pas pourquoi ça ne marchait pas) c'est de rajouter un setVisible(true) après mon repaint.
J'espère que ça va t'aider, ++
Merci mais ca marche pas ! !
Idée suivante ----->
Un petit "s'il vous plaît" ça ne mange pas de pain... :roll:Citation:
Envoyé par fabred
Tu peux aussi chercher par toi même plutot que d'attendre que quelqu'un ai la gentillesse de répondre à ton post si peu chaleureux...
Utilise revalidate :roll:
Salut,
repaint() fonctionne très bien !Citation:
Envoyé par fabred
Donc soit tu l'utilises mal soit ton code est buggé...
Bref un bout de code et un descriptif plus détaillé seraient utiles...
a++
Dsl, mais ca n'ont plus marche pas !
Merci de ton aide !
S'il vous plait, ........:cry:
Salut,
Ta question n'est guère précise, peut-être qu'avec un bout de code nous comprenions mieux ? :roll:
Code:
1
2
3
4
5 public void update(Observable o, Object arg) { this.remplirChamps(); //remplit les champs du tableau this.repaint(); }
Le problème vient surement de remplirChamps()...
a++
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 /* * Remplit les champs du tableau */ private void remplirChamps() { if (getHypothese()!=null && getHypothese().getSaisons().size()>4){ // Recherche de la première année d'étude int a=0; while ( (a<getHypothese().getSaisons().size()) && (getHypothese().getSaisons().get(a).getAnnee()!=getAnnee())){ a++; } for (int i=0;i<5;i++){ this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getTotale(), 0, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getSAU(), 1, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getPropriete(), 2, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getFermage(), 3, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getMetayage(), 4, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getDisposition(), 5, i); this.getJXTabCols().setValueAt(getHypothese().getSaisons().get(i+a).getTerrain().getAutre(), 6, i); } } }
Je me permets de relancer cette conversation car je n'ai toujours pas trouver de solution ! ! !
Solution: ne pas ajouter les données directement dans ta Table mais dans son Model...
C'est la manière standard de procéder en Swing.
Tu peut être plus explicite en me montrant un exemple stp !
http://java.sun.com/docs/books/tutor...able.html#data
Allez, au boulot maintenant ;)
Ouais, je l'ai fait ca mais sans résultat ! ! !
Je suis dégouté, je vois pas d'ou vient le pb :aie:
C'est cela l'Informatique. :mrgreen:Citation:
Envoyé par fabred
Un seul mot : persévérance... :king:
Si tu utilise un composant jtable, il faut obligatoirement créer une classe model de table (une sous classe de AbstractTableModel).
Est-ce que tu as créé un model de table ?
Est-ce que tu as bien implémenter toutes les méthodes ?
J'utilise un JXTable et oui tout à été fait correctement !
Mais le pb vient pas du Table mais de l'observer observable,
j'ai dut oublié quelque chose, mais quoi ?????
Et sans le code ca va être dur de t'aider... (j'ai l'impression d'avoir déjà dit ca)Citation:
Envoyé par fabred
a++
J'ai refait le truc avec un JXTextField, pour que ca soit plus simple a comprendre !
Voici l'observable
Code:
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 public class Hypothese extends Observable{ /** * Nom de l'exploitant */ private String nom; /** * Prenom de l'exploitant */ private String prenom; /** * Constructeur par defaut */ public Hypothese() { super(); addObserver(new PaneDossier(null,null)); this.nom = null; this.prenom = null; } public void setNom(String nom) { this.nom = nom; setChanged(); notifyObservers(); } /** * @param prenom the prenom to set */ public void setPrenom(String prenom) { this.prenom = prenom; setChanged(); notifyObservers(); } }
et l'observer =>
Dans le TextField texte, le nom + le prenom n'appairaisse pas ! !Code:
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 public class PaneDossier extends JPanel implements Observer { /** * */ private JTextField texte; /** * Constructeur par arguments * @param hypothese */ public PaneDossier(Dossier dossier, Hypothese hypothese) { super(); this.hypothese = hypothese; this.dossier = dossier; add(getTexte()); this.remplirChamps(); } public void update(Observable o, Object arg) { setTexte(hypothese.getNom()+hypothese.getPrenom()); this.repaint(); } public void setTexte(String texte) { this.texte.setText(texte); } public JTextField getTexte() { if (texte==null){ texte= new JTextField(); texte.addKeyListener( new KeyAdapter() { public void keyReleased(KeyEvent e) { getHypothese().setTexte(texte.getText()); } }); } return texte; } }
Je crois qu'il va falloir que tu debug ton propre code.
Pour cela, il faut que tu ajoute des System.out.println à certains endroit pour savoir les lignes de codes qui sont appelées et celles qui ne le sont pas.
Apres, tu devrais pouvoir comprendre la cause de ton problème.
Merci, mais je l'ai deja fait cà !
En fait, il passe dans le update, met la chaine (nom+prenom) dans le TExtField
puis revient dans l'observable !
Mais en fait c comme s'il n'été pas passé dans le update !
Tu ajoutes comme observer un PaneDossier vide qui n'est même pas affiché...Code:
1
2
3
4
5
6 public Hypothese() { super(); addObserver(new PaneDossier(null,null)); this.nom = null; this.prenom = null; }
Bref tu a 2 PaneDossier :
- L'un est affiché mais n'est pas enregistré auprès de l'oservable
- L'autre n'est pas affiché, mais est enregistré auprès de l'observable...
:arrow: Evites d'utiliser les constructeurs pour passer des références, surtout lorsqu'il faut une référence à double sens comme dans ce cas...
a++
PS : Et plutôt que d'utiliser des Observer/Observable, tu devrais plutôt utiliser le principe des Listeners : Comment créer son propre Listener ?
Ouais c bon ta v raison, ca à l'air de marcher !
ouais c bon, j'ai rajouté l'observable dans l'observer !!
Merci à tous pour votre aide !
:mrgreen:
Tu m'as pas l'air d'avoir compris le truc... :roll:Citation:
Envoyé par fabred
Apprends la programmation objet en Java avant de te lancer dans du Swing... Sinon, des erreurs tordues de la sorte, tu vas nous en poser un paquet...
EDIT : et si tu pouvais éviter les doubles posts aussi :roll:
Ici on ne fait pas de concours du nombre de réponses...
Desolé, ........