2009-07-21 7 views
3

Je veux mapper une liste de beans à un JTable. L'idée est que chaque colonne sera un champ présélectionné dans le bean et chaque rangée sera un bean dans la liste. La diapositive n ° 32 semble très prometteuse ici: http://swinglabs.org/docs/presentations/2007/DesktopMatters/beans-binding-talk.pdfBeansBinding un JTable dans NetBeans

Cependant, NetBeans n'est pas très amical en me laissant assigner un champ de bean à une colonne. Je peux faire un clic droit sur la JTable et cliquer sur Bind-> Elements et la lier à ma liste de beans. Cependant, il ne me laissera pas spécifier ce qui se passe dans chaque colonne. La seule option est de créer moi-même la liaison, ce qui rend NetBeans inutilisable pour ce genre de choses.

Y a-t-il un détail qui me manque? Il semble que JTable BeansBinding dans NetBeans est juste cassé.

Merci

Répondre

6

Je l'ai fonctionné. Vous ne pouvez pas vraiment utiliser l'option de menu "Lier" pour JTables. Voici comment le faire fonctionner:

  1. Cliquez-droit sur le JTable.
  2. Cliquez sur "Table Contents".
    1. Reliure Source: Formulaire
    2. expression Reliure: $ {var} (où var est le nom de la liste des haricots).
  3. Cliquez sur l'onglet "Colonnes".
  4. Mappez la colonne à l'expression. Cela devrait ressembler à $ {id} et pas à $ {var.id}.

Remarque: Chaque champ mappé à une colonne doit avoir un getter.

4

Aussi attrayante car il peut être d'utiliser l'EDI pour ce genre de choses, il n'y a vraiment pas de substitut pour le codage juste vous-même.

Personnellement, je préfère Glazed Lists pour présenter des haricots dans des tableaux. Prenez les 2 minutes et regardez la vidéo, et je vous garantis que vous serez accro. Avec moins de 15 lignes de code, vous obtiendrez ce que vous recherchez, et aurez un énorme contrôle sur l'affichage - plus le filtrage, le tri et toutes sortes d'autres choses sympas quand vous serez prêt.

+0

C'est marrant que vous mentionniez cette technologie. J'envisageais sérieusement de l'utiliser. J'étais un peu préoccupé par l'ajout d'une autre dépendance à notre projet, alors j'espérais que le beansbinding serait tout ce dont nous avions besoin. Avez-vous remarqué un avantage des listes glacées sur les haricots? – User1

+0

oh ouais - Glazed Lists est de loin supérieur pour la liaison de liste/manipulation que BB (j'aime BB, mais seulement pour la liaison de propriété régulière). GL vaut bien la dépendance (et c'est une bibliothèque fantastique).La prise en charge de la sémantique des verrous et de l'envoi automatique des EDT est une raison suffisante pour utiliser GL - mais vous pouvez ajouter toutes les autres choses fantastiques que vous pouvez faire (filtrage, liste dynamique) et c'est un choix très facile à faire. –

+0

depuis Beans Binding (JSR-295) est maintenant mort en faveur du travail de Sun sur JavaFX, il est probablement préférable d'essayer de ne pas l'utiliser car le support sera quelque peu limité. Une autre raison d'utiliser des listes glacées. – Robin

0

Essayez de rendre la liste observable. changer son initialisation à quelque chose comme ceci:

list1 = ObservableCollections.observableList(new ArrayList<Person>()); 

Ensuite, beaucoup de personnel devrait commencer à travailler. Si vous liez à un haricot alors assurez-vous le feu une propriété événement a changé dans la méthode ensemble de la propriété que vous voulez lié ajouter ce code

private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); 

public void addPropertyChangeListener(PropertyChangeListener listener) { 
    changeSupport.addPropertyChangeListener(listener); 
} 

public void removePropertyChangeListener(PropertyChangeListener listener) { 
    changeSupport.removePropertyChangeListener(listener); 
} 

les importations fixes et faire quelque chose comme ce

public void setFirstName(String firstName) { 
    String oldFirstName = this.firstName; 
    this.firstName = firstName; 
    changeSupport.firePropertyChange("firstName", oldFirstName, firstName); 
} 
+1

Comment cela aide-t-il à résoudre le problème? – monksy