在JavaGUI中使用桥接模式的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 楼答案
Swing
JTable
使用SwingTableModel
来管理其数据。您可以将数据一次性转储到DefaultTableModel
中(从技术上讲,您可以保持同步,但保持单一真相来源是一种更好的设计方法),也可以使用自定义的TableModel
来代理特定于应用程序的集合可以使用
TableCellRenderer
更改表面视图。然而,渲染器在尽可能薄的情况下是最好的,这是最简单的转换层。如果我正确地理解了您的情况,您最好为每个视图定制一个TableModel
自定义
TableModel
可能会使用另一个TableModel
(可能是DefaultTableModel
)实例来保存实际数据(通常,除非必须,否则不要创建子类。忽略此规则在GUI代码中非常常见。)