2009-07-21 8 views
0

J'ai créé un JTable dans une classe maintenant j'ai besoin d'utiliser la même table, pour définir une certaine valeur, dans une classe différente. comment dois-je utiliser le même JTable dans cette classe différente. s'il vous plaît, dites.en utilisant une table dans une classe différente

Répondre

0

Ajoutez une méthode publique dans la classe qui entoure JTable qui définira la valeur et appellera cette méthode de toutes les autres classes.

0

La classe qui contient JTable doit exposer ce champ d'une manière ou d'une autre. Alternativement et de préférence, la classe peut fournir une méthode pour changer une certaine valeur dans JTable. La autre classe doit faire référence à la classe qui contient le JTable (directement ou non):

class A { 
    private JTable myJTable; 

    public JTable getMyJTable() { 
     return myJTable; 
    } 

    public void setMyJTableValue(Object value) { 
     // set the value accordingly 
    } 
} 

class B { 

    private A a; 

    public void methodWithAccessToA() { 
     // business logic ... 
     a.setMyJTableValue(myBusinessValue); 
     // ... 
     a.getMyJTable().setValue(myBusinessValue); 
    } 

} 
+0

Est-ce que la personne qui a déprimé cela peut me donner une raison? –

+0

Je n'ai pas, mais exposer le JTable semble être une mauvaise idée. Encapsulation et ainsi de suite :) – willcodejavaforfood

+0

J'ai également dit que "Alternativement et de préférence, la classe peut fournir une méthode pour changer une certaine valeur dans le JTable" et encapsulation est nécessaire lorsque vous allez à getJTable() ou getJTableModel(). –

2

Vous n'avez pas besoin de la deuxième classe d'avoir accès à la table réelle, seulement à la TableModel sous-jacent. Ceci peut être réalisé de plusieurs façons:

  • Méthode publique getTableModel() dans la première classe que le second peut utiliser pour obtenir une référence au modèle
  • Les deux classes de conserver une référence au modèle qui est défini lors de leur les instances sont créées
  • Une méthode publique addValue() dans la première classe qui prend la valeur et l'ajoute au modèle de table sans exposer le modèle lui-même. C'est la meilleure solution si vous avez seulement besoin d'effectuer des opérations très spécifiques comme l'ajout de valeurs.

La méthode qui vous convient le mieux dépend de votre scénario spécifique.

0

Si vous avez besoin de modifier les valeurs, pourquoi ne travaillez-vous pas sur le modèle de table?

JTable.getModel()

(ou getTableModel(), je ne me souviens pas)

1

Peut-être que je suis trop anale en matière d'encapsulation, mais je ne voudrais pas exposer le TableModel ou JTable lui-même habituellement. Dans la classe contenant le JTable je créerais des méthodes pour ajouter/enlever/placer les valeurs de la JTable. Le cas échéant, je pourrais aussi avoir la classe avec le JTable observer un service qui pourrait changer ses données.

+0

+1 sur l'idée d'observateur – akf

Questions connexes