OVH Cloud OVH Cloud

optimisation jtable&model

3 réponses
Avatar
AKIRA
J'ai défini 1 classe C dérivant d'un Jpanel qui intègre une jtable
implémentant 1 tableModel.

Une classe A(singleton) et une classe B(singleton) dérivant de JPanel
utilise ce composant (classe C).

Question 1 : Lorsque des fenêtres recouvrent la table, les éléments, lignes
sont effacées. Comment faire pour que le tableau soit redessiné
automatiquement?

Question 2 : le classe A ou B stocke le model et réouvre les anciennes
données. m_vector du model étant private, j'ai des méthodes addRow,
updateRow, DeleteRow. Quelle est la méthode élégante de réinitialiser le
model à chaque ouverture de A ou B?

3 réponses

Avatar
Fabien
Bonjour,

J'ai défini 1 classe C dérivant d'un Jpanel qui intègre une jtable
implémentant 1 tableModel.



Je ne comprends pas bien, as-tu :

public class C extends JTable implements TableModel


Question 1 : Lorsque des fenêtres recouvrent la table, les éléments, lignes
sont effacées. Comment faire pour que le tableau soit redessiné
automatiquement?



Cela ne doit pas se produire normallement mais si tu peux répondre "oui"
à ma question précédente et que tu écris le code suivant :

C c=new C();
c.setTableModel(c);

Dans ce cas, tu as une boucle infinie qui te bloque ton thread et donc,
effectivement, le fait de faire passer une fenêtre sur ta table
l'empêche de se redessiner...

@+ Fabien

Avatar
AKIRA
En fait,

j'ai une fenêtre JPanel(class CMain extends JPanel) => classe singleton

j'ai un autre JPanel(classe CTable extends JPanel) => class intégrant une
JTable(avec in tableModel)

je fais un CMain.add(CTable) avec un BorderLayout.

Lorsque des fenêtres recouvrent la table, les éléments, lignes
sont effacées. Comment faire pour que le tableau soit redessiné
automatiquement? Car seuls les éléments de CTable sont effacés par un
recrouvrement. Un ajout, suppression, fait un fireTableChange donc c'est OK


mais le recouvrement pose un problème.



"Fabien" a écrit dans le message de news:
41f69783$0$2163$
Bonjour,

J'ai défini 1 classe C dérivant d'un Jpanel qui intègre une jtable
implémentant 1 tableModel.



Je ne comprends pas bien, as-tu :

public class C extends JTable implements TableModel


Question 1 : Lorsque des fenêtres recouvrent la table, les éléments,
lignes


sont effacées. Comment faire pour que le tableau soit redessiné
automatiquement?



Cela ne doit pas se produire normallement mais si tu peux répondre "oui"
à ma question précédente et que tu écris le code suivant :

C c=new C();
c.setTableModel(c);

Dans ce cas, tu as une boucle infinie qui te bloque ton thread et donc,
effectivement, le fait de faire passer une fenêtre sur ta table
l'empêche de se redessiner...

@+ Fabien



Avatar
Fabien
AKIRA wrote:
En fait,

j'ai une fenêtre JPanel(class CMain extends JPanel) => classe singleton

j'ai un autre JPanel(classe CTable extends JPanel) => class intégrant une
JTable(avec in tableModel)

je fais un CMain.add(CTable) avec un BorderLayout.

Bizarre, normallement ca devrait marcher...

As-tu customizé les CellRenderers de ta JTable ?

@+ Fabien