Динамическое изменение размера JPanel

У меня есть JPanel, в JScrollPanel и когда вся программа скомпилирована и запущена, отображается gui, содержащая JPanel и JScrollPanel (и другие компоненты). Всякий раз, когда пользователь рисует что-то на краю JPanel (скажем, в пределах n пикселей около нижнего или левого края), gui должен автоматически изменять размер JPanel, то есть увеличивать размер JPanel. Я использовал прослушиватели событий мыши (MouseDragged, MouseClicked, MousePressed, используется для рисования), и в этих слушателях я установил новый увеличенный размер для JPanel. Поэтому всякий раз, когда что-то нарисовано на краю, размер JPanel должен быть увеличен (и поскольку он находится в JScrollPane, если увеличение является существенным, тогда должна появиться полоса прокрутки). Но изменение размера не происходит.

1 ответ

Полоса прокрутки будет отображаться автоматически, когда предпочтительный размер компонента, добавленного в окно просмотра прокрутки, больше, чем размер прокрутки. Таким образом, вам необходимо переопределить метод getPreferrredSize() для JPanel для динамического пересчета предпочтительного размера.

Предпочитаемый размер расчета должен учитывать:

  1. размер всех компонентов, окрашенных на панель. Поэтому yo, вероятно, будет использовать ArayList для отслеживания всех компонентов. Затем вы просто просматриваете список, чтобы определить наибольшую позицию ширины/высоты любого компонента.

  2. когда мышь перетаскивается. Если это значение больше ширины/высоты вышеуказанного расчета, вам необходимо использовать это значение. Вам также необходимо вызвать revalidate() для каждого события mouseDragged, чтобы убедиться, что компоновка компонента выполнена.

licensed under cc by-sa 3.0 with attribution.