назначить скрытое значение для каждой строки jTable - PullRequest
0 голосов
/ 18 марта 2011

Как я могу назначить идентификатор для каждой строки jTable?
Я не хочу, чтобы пользователь мог видеть это.

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Вы должны реализовать свою собственную табличную модель, создав класс, реализующий TableModel, или, возможно, более просто создать класс, расширяющий AbstractTableModel.

Если вы сделаете это тогда, вам нужно только реализовать

class MyModel extends AbstractTableModel {

    public Object getValueAt(int rowIndex, int columnIndex) {
        // return what value is appropriate  
        return null;  
    }

    public int getColumnCount() {
    // return however many columns you want
        return 1;
}

    public int getRowCount() {
    // return however many rows you want
    return 1;
}
}

обычно вы создаете список в классе объекта по вашему выбору, и getRowCount будет просто указывать, насколько велик список.

getValueAt будет возвращать значения из объекта в списке.

Например, если бы я хотел таблицу пользователей со скрытым идентификатором, это было бы

class UserModel extends AbstractTableModel {

    private List<User> users = new ArrayList<User>();

    public Object getValueAt(int rowIndex, int columnIndex) {
        User user = users.get(rowIndex);
        if (columnIndex == 0)
            return user.getName();
        else
            return user.getAge(); //whatever 
    }

    public int getColumnCount() {
        return 2;
    }

    public int getRowCount() {
        return users.size();
    }
}

class User {
    private int userId; // hidden from the table
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
2 голосов
/ 18 марта 2011

Быстрый взлом - это просто использование скрытого столбца . Лучшим способом может быть написание пользовательской табличной модели, которая даже не отображает указанные данные в JTable, но это более сложное занятие: -)

Счастливого кодирования.

1 голос
/ 18 марта 2011

rowData - это просто массив Object, поэтому в вашем классе, представляющем модель строки, есть переменная-член для id, которая не будет включена в toString ().

...