So legen Sie ein benutzerdefiniertes Objekt in einer JTable-Zeile fest

Ich sollte dies zuerst sagen, es geht NICHT um das Rendern einer Tabellenzelle.

Hier ist das TableModel, das ich mit einem 2D-Array auf der Basis von a aufbaueUser Objekt in meiner DB.

    List<User> userList = userManagerService.getAllUsers();

    /* String[] col_user = {"Username", "Name", "Phone", .... } */
    String[][] data = new String[userList.size()][col_user.length];
    int i = 0;
    for (User user : userList) {
        String[] userdata = new String[col_user.length];
        userdata[0] = user.getUserUsername();
        userdata[1] = user.getUserName();
        userdata[2] = user.getUserPhone();
        userdata[3] = user.getUserNic();
        userdata[4] = user.getUserAddress();
        userdata[5] = user.getUserEmail();

        data[i++] = userdata;
    }

    VstTableItemModel tiModel = new VstTableItemModel(data, col_user);
    dataTable.setModel(tiModel);

Mein Problem ist, wie bekomme ich eineUser Objekt zurück, unter Verwendung der ausgewählten Zeile in der Tabelle. Beachten Sie, dass ich kein neues erstellen kannUser Objekt und füllen Sie es mit den Zeilendaten. Ich muss das abgefragt bekommenUser Objekt (Objekte inuserList). Gibt es eine Möglichkeit, ein Objekt mit einer Tabellenzeile festzulegen?

Hier ist meinVstTableItemModel Klasse.

public class VstTableItemModel extends AbstractTableModel {

    ArrayList<Object[]> data;
    String[] header;

    public VstTableItemModel(Object[][] obj, String[] header) {
        this.header = header;
        data = new ArrayList<Object[]>();

        for (int i = 0; i < obj.length; ++i) {
            data.add(obj[i]);
        }
    }

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

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

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data.get(rowIndex)[columnIndex];
    }

    @Override
    public String getColumnName(int index) {
        return header[index];
    }

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage