在Java GUI中使用桥接模式?

时间:2019-01-31 19:42:24

标签: java swing

我正在按设计模式进行作业。问题是,商店中有物品清单。因此,我们要求将列表分为两种方式,一种用于客户视图,另一种用于执行者视图。因此,我选择了桥接模式,因为它将抽象与实现分开。

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表中显示项目,我该怎么做?我可以在控制台中打印,但是在GUI中如何打印?

1 个答案:

答案 0 :(得分:0)

Swing JTable使用Swing TableModel管理其数据。您可以一次将数据转储到DefaultTableModel中(从技术上讲,您可以使数据保持同步,但是保持单一的事实来源是一种更好的设计方法),也可以使用自定义TableModel代理到特定于应用程序的集合。

您可以使用TableCellRenderer更改表面视图。但是,渲染器越薄越好-尽可能最简单的平移层。如果我正确了解您的情况,最好为每个视图使用自定义TableModel

自定义TableModel可以很好地使用另一个TableModel(也许是DefaultTableModel)实例来保存该实际数据。

(与往常一样,除非您必须这样做,否则不要继承它的类。忽略此规则在GUI代码中非常普遍。)