Используя шаблон моста в графическом интерфейсе Java? - PullRequest
0 голосов
/ 31 января 2019

Я выполняю свое задание по шаблону проектирования.Вопрос в том, есть ли список товаров в магазине.Поэтому мы попросили нарисовать список двумя способами: один для клиента и второй для руководителя.Поэтому я выбираю шаблон моста, поскольку он отделяет абстракцию от реализации.

public interface DrawingAPI {
    public void draw(List<Item> items);
}

интерфейс реализации

public class CustomerView implements DrawingAPI{

    @Override
    public void draw(List<Item> items) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

конкретный разработчик, отображающий список элементов для клиента.

public abstract class UserData {
    DrawingAPI drawingAPI;

    public UserData(DrawingAPI dapi) {
        this.drawingAPI = dapi;
    }

    public void setDrawingAPI(DrawingAPI dapi) {
        this.drawingAPI = dapi;
    }

    public abstract void draw();
}

абстракция

public class TanaUserData extends UserData{
    List<Item> stockCard;

    public TanaUserData(List<Item> stock ,DrawingAPI dapi) {
        super(dapi);
        this.stockCard = stock;
    }

    @Override
    public void draw() {
        this.drawingAPI.draw(stockCard);
    } 
}

класс, который содержит записи элементов, при условии, что в stockCard есть несколько элементов.

Вот проблема, я хочу, чтобы класс CustomerView и ExecutiveViewчтобы отобразить элементы в Swing Table, как я могу это сделать?Я могу печатать в консоли, но как насчет GUI?

1 Ответ

0 голосов
/ 01 февраля 2019

Swing JTable использует Swing TableModel для управления своими данными.Вы можете сделать одноразовый дамп своих данных в DefaultTableModel (технически вы можете синхронизировать это, но сохранить единый источник правды - гораздо лучший подход к проектированию) или создать пользовательский TableModel, который проксирует в приложенииопределенная коллекция.

Вы можете изменить внешний вид, используя TableCellRenderer.Тем не менее, рендеры лучше всего использовать, когда они максимально тонкие - самый простой из возможных слоев перевода.Если я правильно понимаю вашу ситуацию, вам лучше использовать пользовательский TableModel для каждого представления.

Пользовательский TableModel вполне может использовать другой экземпляр TableModel (возможно, DefaultTableModel) для хранения этого фактическогоdata.

(Как всегда, не делайте подклассы, если вам не нужно. Игнорирование этого правила очень печально в коде GUI.)

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