У меня есть довольно сложные данные, и в данный момент я нахожусь в хеш-таблицах, которые указывают на другие классы, которые также содержат хеш-таблицы, потому что в данных, которые я пытаюсь сохранить, есть множество отношений.
с другой стороны, у меня есть таблица, которая работает довольно хорошо, за исключением того, что она не имеет никакого отношения к моей модели данных.У него есть своя настольная модель.Я создаю его очень простым способом -
Object[][] tableData = new Object[4][ tableHeaders.length ];
modelTablet = new TabletTableModel(tableData, tableHeaders );
моя модель данных планшета очень проста,
class TabletTableModel extends DefaultTableModel {
public TabletTableModel(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
if (col == 0) {
return String.class;
} else {
return Double.class;
}
}
@Override
public boolean isCellEditable(int row, int col)
{
if (col == 0 || col == activeColumn)
return true;
else
return false;
}
}
, которая мне подходит, так как я также должен делать такие вещи, как добавление и удалениестрок, которые с этой простой моделью данных, большая часть работы сделана для меня.
class AddRowActionListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
DefaultTableModel model = (DefaultTableModel)tableTablet.getModel();
model.addRow(new Object[3]);
System.out.println(Arrays.deepToString(tableData));
}
}
Я также реализовал слушатель мыши и средство визуализации ячеек, чтобы при нажатии на заголовок столбцаон становится активным, и ячейки в соседнем столбце перекрашиваются в другой цвет, чтобы указать, что они больше не редактируются.
Пока все хорошо, но для моего интерфейса у меня есть вторая таблица, в которой обобщены результатыПервый столЭто всего три строки, без заголовка.Я думаю, что, возможно, я проделал больше работы, чем мне было нужно, когда я сделал это.
modelSummary = new SummaryTableModel(1, tableHeaders.length);
tableSummary = new JTable(modelSummary);
class SummaryTableModel extends DefaultTableModel {
public SummaryTableModel(int rows, int columns) {
super(rows, columns);
}
@Override
public Class getColumnClass(int col) {
if (col == 0) {
return String.class;
} else {
return Double.class;
}
@Override
public boolean isCellEditable(int row, int col)
{
if (col == 1 && activeColumn == 2)
return true;
else
return false;
}
}
Так что это дает мне хороший набор таблиц, они перекрашивают, как они должны, они ограничивают данные до допустимых значенийи отформатируйте его должным образом (с моими средствами визуализации, которые я не перечислил).
Но вот что должно произойти - пользователь вводит значение в столбец 1 таблицы 1, затем мне нужно суммировать по всем значениямв столбце 1 выведите это значение из столбца 1 таблицы 2, а затем пересчитайте все значения в столбце 2 таблицы 1 на основе этого нового значения.
И наоборот, если столбец 2 является активным столбцом и пользователь изменяетзначение в столбце 2 таблицы 1, тогда мне нужно получить значение столбца 1 в таблице 2 и использовать его для пересчета всех значений столбца 1 в таблице 1, а также суммировать значения столбца 2 и поместить их в столбец 2таблицы 2. С оговоркой, что пользователь не может ввести новое значение, такое, что сумма чисел в столбце 2 превышает 100.
Таблица 2 также может быть отредактирована, что потребовало быe вычисление всех значений в таблице 1.
Итак ... мне кажется, что у меня должна быть наблюдаемая, и я должен зарегистрировать свои таблицы как наблюдатели и как контролеры для наблюдаемой.Таким образом, я могу написать наблюдаемую, но у меня все еще есть две модели таблиц данных.Я много читал, но все примеры, которые я нашел, показывают в наблюдаемой, используемой с чем-то простым, например, с текстовым полем или табличными моделями, но без использования класса Observable.Другая проблема заключается в том, что я не уверен, как делать большинство интересных вещей (таких как добавление строк или проверка типов), которые модель по умолчанию с радостью делает для меня по умолчанию.
Перед тем, как добавить новое измерениесложность моего проекта - кто-нибудь может дать мне несколько советов?Легко ли смешивать модели данных, которые практически не имеют представления о строках или столбцах, с моделями данных таблицы, которые не требуют повторной записи всех операций модели таблицы по умолчанию?Весь процесс кажется мне невероятно сложным в данный момент.Мне отчаянно нужно какое-то четкое объяснение того, как это должно работать.