2010-12-14 64 views
1

J'ai du mal à implémenter un JList en Java en utilisant le MVC Pattern parce que je n'arrive pas à comprendre comment je vais écrire le contrôleur et la vue (chacun dans une classe séparée) pour que Je peux appeler les méthodes du modèle. Exemple: Dans le modèle, j'ai une méthode appelée (getBooks()) et dans l'interface graphique un cadre avec un JList de sorte que lorsque je clique sur un élément de la liste, certaines zones seront remplies informations appropriées (titre, auteur, etc.). Le problème est que je ne suis pas sûr de savoir comment écrire les écouteurs dans le contrôleur et/ou dans la vue. Par la façon dont les éléments de la liste doivent également être chargés à partir du modèle.Java List MVC Pattern

Merci.

Répondre

2

L'écouteur que vous souhaitez enregistrer avec votre JList est un ListSelectionListener, qui vous alertera lorsque la sélection sera modifiée. Si je faisais ce que je ferais quelque chose de semblable à ce qui suit:

public class BookListModel { 
    public List<Book> getBooks() { 
     // Replace with however you get your books 
     return Arrays.asList(new Book("It", "Stephen King"), 
      new Book("The Lion, The Witch, and the Wardrobe", "C.S. Lewis")); 
    } 
} 

public class Book { 
    private String title; 
    private String author; 

    public String getTitle() { return title; } 
    public String getAuthor() { return author; } 

    public Book(String title, String author) { 
     this.title = title; 
     this.author = author; 
    } 
} 

public class BookListView extends JPanel { 

    private JList books; 
    private BookInfoView bookInfo; 
    private BookListModel model; 
    public BookListView(BookListModel model) { 
     books = new JList(model.toArray()); 

     bookInfo = new BookInfoView(); 

     books.addListSelectionListener(new ListSelectionListener() { 
      public void valueChanged(ListSelectionEvent e) { 
       // get the book that was clicked 
       // call setBook on the BookInfoView 
      } 
     }); 

     // Add the JList and the info view 
    } 

} 

public class BookInfoView extends JPanel { 

    private JLabel titleLabel; 
    private JLabel authorLabel; 

    private JTextField titleTextField; 
    private JTextField authorTextField; 

    public void setBook(Book b) { 
     // adjust the text fields appropriately 
    } 

} 

qui précède suppose que la liste des livres est statique. Si ce n'est pas le cas, vous devez étendre votre BookListModel à DefaultListModel et remplir les méthodes appropriées.