Мне нужно отобразить основные графические элементы для исследовательского проекта. Эти элементы будут отображаться в виде сетки (например, 128 X 128 квадратов, каждый квадрат, содержащий другой элемент).
Единственное, что я могу сказать, работает против JTable
в том, что он был спроектирован так, чтобы каждый столбец был одним и тем же типом объекта.
Это не значит, что это невозможно, но для этого требуется больше работы с обработчиками ячеек и обновлением отдельных значений.
Я хочу, чтобы иметь возможность легко получить доступ к элементам на сетке координат,
Это зависит от вашей начальной точки входа. Например, если у вас есть только точка мыши, вы можете задать таблицу для строки и столбца, который представляет данную точку, к примеру ...
Point p = mouseEvent.getPoint();
int row = table.rowAtPoint(p);
int col = table.columnAtPoint(p);
После того, как вы едите, что вы можете просто получить ячейку значение из таблицы, используя что-то вроде ...
Object cellValue = table.getValueAt(row, col);
перерисовывать только что конкретной клетки
как правило, это может быть достигнуто за счет TableModel
, который должен уведомлять таблицу о том, что часть таблицы обновлена и должна быть перекрашена.
Например, в AbstractTableModel
существует ряд «событийных» методов, которые могут использоваться для генерации событий, которые сообщают таблице о том, что какая-то часть модели изменилась.
Например, вы можете использовать public void fireTableCellUpdated(int row, int column), чтобы сообщить таблице, что данная ячейка изменилась, и таблица отреагирует на нее, перекрасив данную ячейку. Это обычно называют моделью.
и я думаю, что мне придется переместить логику в код рендеринга (или использовать обертки).
API-интерфейс таблицы (и на самом деле многие из передовых компонентов в Swing) использует средство визуализации, позволяющее программам определять, как должны отображаться определенные элементы в компоненте.
Посмотрите на Using custom renderers для получения более подробной информации ...
В общем, JTable
является сложным API, но сложность исходит из его встроенной гибкости. Чем больше вы его используете, тем больше вы найдете для этого ...
Более подробно см. How to use tables.
Пожалуйста, объясните, почему вы считаете реализацию на основе JTable «неуклюжей *». –
Возможно, я не думал, что это правильно, но похоже, что JTable не предлагает гибкости, которую я хочу. Я хочу иметь возможность легко обращаться к элементам на сетке по координатам, перерисовывать только эту конкретную ячейку, и я думаю, что мне придется переместить логику в код рендеринга (или использовать обертки). В общем, я пытаюсь выяснить, будет ли реализация JTable вызывать меньше головных болей в долгосрочной перспективе, а не что-то вроде офсетных макетов. – Eugen
Ну, есть также «GridLayout», но, как и @ PM77-1, моя первая мысль была 'JTable'. –