Прокручиваемая JPanel в ячейке JTable - PullRequest
1 голос
/ 20 декабря 2010

Я хочу создать пользовательскую ячейку в JTable.Я использовал пользовательский рендерер и вернул объект JPanel.Это работает, но есть одна проблема.Во время работы программы JPanel рисует сам, используя метод paintComponent ().На каждом "тике" (обычно каждые 100 мс) панель становится шире (мне бы хотелось, чтобы она изменила размеры и создала полосу прокрутки. Я пробовал несколько способов установки ScrollPane, но ни один из них не работал. В принципе, я хочу что-то вроде представления потокав Java VisualVM. Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 декабря 2010

Поместить панель прокрутки в обычную ячейку таблицы очень сложно, поскольку для визуализации всех ячеек в таблице используется только один компонент.Может быть, удалить JTable и просто поместить большой набор компонентов в обычный JPanel с разметкой сетки?

Если вы все еще хотите использовать JTable:

Каждая панель прокрутки содержит специальный элемент управления JViewport.Этот элемент управления JViewport фактически выполняет всю работу по прокрутке, а сам JSrollPane размещает его только с полосами прокрутки.Поскольку один видовой экран используется для всех ячеек, вы должны где-то хранить эту позицию прокрутки и восстанавливать ее для каждой ячейки рисования (в методе getCellRenderer).Но JSrollPane нужно много работать над макетом, так что это очень медленное решение.

Может быть наиболее предпочтительным решением: переопределить метод рисования в ячейке JPane, и этот метод рисования должен создавать вложенную графику (Graphics.create ()) с правильным смещением прокрутки.Данные смещения прокрутки должны где-то храниться (например, в модели таблицы).Когда пользователь нажимает на ячейку, JTable начинает редактирование ячейки и устанавливает редактор ячейки.Это должен быть специальный редактор ячеек, содержащий саму панель прокрутки.Пользователь прокрутил этот элемент управления (особой поддержки не требуется) и продолжил редактирование ячейки. Вы должны сохранить положение прокрутки в модели (в функции stopCellEditing ()).Затем ячейка отрисовывает саму краску и в методе рисования получает смещение прокрутки содержимого от модели.Пользователь видит прокручиваемую ячейку.Вы также можете поместить JScrollBar в визуализированную ячейку, чтобы пользователь мог видеть позицию прокрутки (но для этого нужна специальная поддержка).Вы также можете использовать сам JViewport для выполнения всей тяжелой работы, но трудно поддается контролю.Я не вижу никаких проблем с использованием прокрутки в редакторе ячеек, поэтому он должен работать.В любом случае это огромная работа.

0 голосов
/ 23 декабря 2010

Итак, вы настроили настраиваемое средство визуализации ячеек таблицы, и я предполагаю, что это средство визуализации JScrollPane для JPanel.Возможно, вам придется поиграть с вызовами setPreferredSize() на панели прокрутки и вызовом setPreferredSize() и / или setSize() на панели (или любым другим внутренним элементом, просматриваемым на панели прокрутки), прежде чем вызывать validate() для запускаобновление макета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...