AbstractTableModel содержит три метода, которые необходимо перезаписать. Это:
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
JTable использует эти методы для определения количества полей (строк и столбцов) и получения значения (как объекта типа) для каждого поля. Когда вы переписываете эти методы, вам нужен тип данных, которые вы хотите использовать. Например, вы можете использовать двухмерный массив объектов:
Object[][] data;
или ArrayList или Hashtable:
List
. Размер массива с размерами может быть проще в использовании, но это больше трудно динамически добавлять значения. Конечно, вы также можете использовать Карты или другие структуры данных. Вам просто нужно скорректировать реализацию трех вышеупомянутых методов, чтобы вернуть правильную информацию из вашей структуры данных, например, сколько строк в вашей модели в настоящее время и т. Д.
Есть еще несколько методов, которые можно перезаписать , но не нужно, например, если вы хотите иметь собственные имена столбцов, вы должны дополнительно перезаписать метод 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);
}
Для элементов, которые вы хотите быть видимыми все время, примените:
position: absolute
blockquote>Для использования оранжевого элемента
bottom: 0;
blockquote>, а для желтого
используйте право: 0, верх: 50%;
blockquote>Если вы хотите получить более подробную информацию, напишите скрипку для того же
Проблема, с которой вы сталкиваетесь с желтым элементом, заключается в том, что с вашим стилем вы рассматриваете его как элемент родительского / контейнерного элемента flexbox, тогда как вы действительно хотите рассматривать его как дочерний элемент для своего родителя.
Добавление следующего родительского div должно центрировать желтую рамку:
<div fxFlexFill fxLayout="column" fxLayoutAlign="center center">
Еще одна проблема, с которой вам придется столкнуться, заключается в том, что, когда вы программно добавляете в свой дополнительные элементы, они будут течь с желтым div. В зависимости от того, чего вы хотите достичь с точки зрения макета, возможно, вам нужно пересмотреть способ, которым вы хотите выложить элементы, хотя из вашего сообщения неясно, как вы намереваетесь их выложить, когда дополнительные элементы добавлено на страницу.