2014-01-06 5 views
0

Мне нужно отобразить основные графические элементы для исследовательского проекта. Эти элементы будут отображаться как сетка (например, 128 X 128 квадратов, каждый квадрат содержит другой элемент).Лучший способ отображения сетки?

Отображаемая часть приложения является вторичной по отношению к логике позади нее, поэтому я ищу самый простой способ отображения такой сетки (при использовании Swing). До сих пор я рассматривал JTable, но кажется неуклюжим. Я бы хотел использовать что-то на основе Интернета, но это не подходит для приложения.

Есть ли библиотеки или лучшие компоненты для такого рисования в базовой Java/Swing?

+0

Пожалуйста, объясните, почему вы считаете реализацию на основе JTable «неуклюжей *». –

+0

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

+0

Ну, есть также «GridLayout», но, как и @ PM77-1, моя первая мысль была 'JTable'. –

ответ

2

Мне нужно отобразить основные графические элементы для исследовательского проекта. Эти элементы будут отображаться в виде сетки (например, 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.

+0

Отличный и подробный ответ. Спасибо, что нашли время! JTable это так. – Eugen

+1

'JTable' - невероятно мощный API и стоит потратить время, чтобы узнать, даже если он не удовлетворяет вашим требованиям, это будет потрачено время;) – MadProgrammer

Смежные вопросы