Шаблон списка MVC Java - PullRequest
       5

Шаблон списка MVC Java

1 голос
/ 14 декабря 2010

У меня возникли проблемы с реализацией JList в Java с использованием шаблона MVC, потому что я не могу понять, как мне написать контроллер и представление (каждое в отдельном классе), чтобы я мог вызвать методы из модели. Пример: в модели у меня есть метод с именем (getBooks ()), а в графическом интерфейсе - фрейм с JList, так что при щелчке элемента в списке некоторые текстовые поля будут заполнены соответствующей информацией (название , автор и т. д.). Проблема в том, что я не уверен, как записывать слушатели в контроллере и / или в представлении. Кстати, элементы из списка также должны быть загружены из модели.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Слушатель, которого вы хотите зарегистрировать в своем JList, - это ListSelectionListener , который будет предупреждать вас об изменении выбора.Если бы я делал это, я бы сделал что-то похожее на следующее:

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
    }

}

Выше предполагается, что список книг является статическим.Если это не так, вы должны заставить свою BookListModel расширить DefaultListModel и заполнить соответствующие методы.

1 голос
/ 14 декабря 2010

Существует несколько подходов к созданию модели списка, которые обсуждаются здесь . Swing использует разделяемую модель архитектуры , описанную далее в Обзор архитектуры Swing .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...