JTable в Java Eclipse [дубликат]

Это должно работать (работает для меня)

  update table_a external set sequence_column = (выберите rnum from (- оцените row_number () для всех строк, упорядоченных вашими столбцами - ПЕРЕД обновлением этих  значения в table_a выберите id, row_number () over (order by column1, column2) rnum from table_a) internal - присоединитесь к первичному ключу, чтобы убедиться, что вы получите только одно значение - для rnum, где inner.id = внешний.  Я бы);   

ИЛИ вы используете оператор MERGE . Что-то вроде этого.

  сливается в table_a u, используя (select id, row_number () over (order by column1, column2) rnum from table_a) s on (u.id = s.id), когда  затем установлен набор обновлений u.sequence_column = s.rnum  
3
задан Vagelism 23 March 2012 в 22:02
поделиться

1 ответ

AbstractTableModel содержит три метода, которые необходимо перезаписать. Это:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

JTable использует эти методы для определения количества полей (строк и столбцов) и получения значения (как объекта типа) для каждого поля. Когда вы переписываете эти методы, вам нужен тип данных, которые вы хотите использовать. Например, вы можете использовать двухмерный массив объектов:

Object[][] data;

или ArrayList или Hashtable:

List<Object[]> data = new ArrayList<Object[]>();

. Размер массива с размерами может быть проще в использовании, но это больше трудно динамически добавлять значения. Конечно, вы также можете использовать Карты или другие структуры данных. Вам просто нужно скорректировать реализацию трех вышеупомянутых методов, чтобы вернуть правильную информацию из вашей структуры данных, например, сколько строк в вашей модели в настоящее время и т. Д.

Есть еще несколько методов, которые можно перезаписать , но не нужно, например, если вы хотите иметь собственные имена столбцов, вы должны дополнительно перезаписать метод public String getColumnName(int col). Например, например:

private static final String[] COLUMN_NAMES = {"User", "Password", "Age"};
public String getColumnName(int col) {
    return COLUMN_NAMES[col];
}

Посмотрите на Javadoc для AbstractTableModel , чтобы получить обзор других методов, которые могут быть перезаписаны.

Если вы хотите чтобы иметь возможность изменять данные в вашем TableModel, вам необходимо перезаписать метод setValueAt (если я не ошибаюсь):

void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    //depending on your data structure add the aValue object to the specified
    //rowIndex and columnIndex position in your data object
    //notify the JTable object:
    fireTableCellUpdated(row, col);
}

Важно: всякий раз, когда вы добавляете или удаляете строку, соответствующая функция в вашей реализации TableModel должна вызвать соответствующую функцию fireTableRowsInserted (или удалить). В противном случае вы увидите странные визуальные эффекты с вашим JTable:

public void addRow(Object[] dates) {
    data.add(dates);
    int row = data.indexOf(dates);
    for(int column = 0; column < dates.length; column++) {
        fireTableCellUpdated(row, column);
    }
    fireTableRowsInserted(row, row);
}
18
ответ дан lanoxx 17 August 2018 в 11:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: