如何在单个JTable中联接来自2个不同表的数据

时间:2019-05-17 08:32:53

标签: java swing join jtable tablemodel

我正在为员工管理系统编写程序。现在,我正在为员工注册创建CRUD表单,我在数据层,业务逻辑和gui中分离了src代码。在gui中,我将gui视图和gui模型分开了, Gui模型我创建了一个EmployeeTableModel,以指定我要如何显示employee Table的数据,但是在该表中我得到了来自多个表的数据,一个是数据库中的Employee表,另一个是Phone ..我已经成功获取来自Employee Table的数据,我可以将这些数据放入数据库的Employee Table和Phone表中,但是我无法将它们放入TableModel中,只能从employee中获取数据。

PHOTO OF THE TABLE

ALL SOURCE CODE HERE - GIT

我尝试更改EmployeeTableModel中的代码以接受更多列并提供一种从电话表中添​​加数据的方法,但是由于每个员工都有2个-3电话号码并且Employee_ID被指定为外部用户,所以该方法没有起作用电话表上的密钥..正如我所说,每位员工有3个电话,当我们指定要获取的电话时,它是与employee_id有关的,这是电话表中的外键。

public class PunetoriTableModel extends AbstractTableModel {

List<Punetori> list;
TelefoniRepository tr = new TelefoniRepository();
PunetoriRepository pr = new PunetoriRepository();

String[] cols = {"Nr.", "Nr-Departmentit", "Emri", "Mbiemri", "Email", "Qyteti","Adresa","tel1","tel2"};

public PunetoriTableModel() {
}

public PunetoriTableModel(List<Punetori> list) {
    this.list = list;
}

public void addList(List<Punetori> list) {
    this.list = list;
}

@Override
public String getColumnName(int col) {
    return cols[col];
}

@Override
public int getRowCount() {
    return list.size();
}

public void remove(int row) {
    list.remove(row);
}

public Punetori getPersoni(int index) {
    return list.get(index);
}

@Override
public int getColumnCount() {
    return cols.length;
}

public String getDateToString(Date d) {
    DateFormat da = new SimpleDateFormat("dd-MM-yyyy");
    return da.format(d);

}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
     Punetori p = list.get(rowIndex) ;


        switch (columnIndex) {
            case 0:
                return p.getPunetoriID();
            case 1:
                return p.getDepartmentiId();
            case 2:
                return p.getEmri();
            case 3:
                return p.getMbiemri();
            case 4:
                return p.getEmail();
            case 5:
                return p.getQyteti();
            case 6:
                return p.getAdresa();




            default:
                return null;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

首先确定您的列将是什么。当某些员工使用多个电话时,您似乎对这些列应该是什么感到困惑。目前尚不清楚您的问题是什么,但可能只是将其画在一张纸上已经可以使您头脑清醒。

还要确定这些列是固定的还是动态的(即是否有可能为某些雇员增加更多的列,您需要将它们添加到表中?)

第二,创建一个单独的数据结构,让我们调用此类EmployeeData,该类捕获所需的信息。将此与PunetoriTableModel分开。从您的数据存储库中填充。 在其中放进了必要的逻辑,该逻辑决定了要使用哪个电话,或者需要什么自定义业务逻辑。

使EmployeeData提供一些公共方法,例如getColumns()getRowCount()getRow(int i)等。

在您的PunetoriTableModel的构造函数中,只需传递EmployeeData,并在各个方法内部调用EmployeeData。这样,表模型将数据视为一个表,并且您具有自定义逻辑,该逻辑将来自不同表的数据组合成一个单独的数据。