Использование JScrollPane для прокрутки и действительно большого и увеличенного пользовательского чертежа

#java #swing #jscrollpane #simulator #circuit

#java #swing #jscrollpane #тренажёр #схема

Вопрос:

Я работаю в личном проекте. симулятор схемы, если вам интересно. В моем проекте я использую JPanel для рисования своего контента. Я могу перемещать его и увеличивать с помощью AffineTransformations. Каждый раз, когда вызывается paint(), я рисую область чертежа, которую должен видеть пользователь. Чертеж может быть очень большим (у меня нет ограничений на то, насколько он может быть большим). Я использую прямоугольник, который отслеживает видимую область моего чертежа и рисует его в JPanel graphics2d.

Теперь я хочу добавить полосы прокрутки для перемещения моего окна просмотра, я думаю, что JScrollPane может быть полезен. Я видел много тем, в которых говорилось об использовании JPanel с JScrollPane для прокрутки простого содержимого. Первое, на что вы смотрите, это это, но мне не нравятся эти решения, потому что scrollpane действительно прокручивает JPanel. И во всех примерах я должен рисовать ВСЮ ОБЛАСТЬ ПАНЕЛИ!. Я рисую только видимую область панели, потому что это отнимает много времени.

Итак, мой вопрос: как я могу использовать область прокрутки для перемещения моего пользовательского окна просмотра и отражения изменений (я не хочу прокручивать jpanel, который я использую для рисования)? Или я должен использовать JPanel и две простые JScrollBars?

Я не могу найти простое руководство по реализации интерфейса с возможностью прокрутки с нуля. Все учебные пособия начинаются с JPanel или JLabel

Спасибо за любой совет!!

(извините за мой английский)

Ответ №1:

Предполагая, что вы используете paintComponent для рисования своего содержимого, вы можете проверить границы Graphics клипа. Это подскажет вам, какую область необходимо перекрасить, при просмотре из a JScrollPane область прокрутки уменьшит область, которую она хочет перекрасить, чтобы соответствовать ее видимой области.

Важно помнить об этом, что область, представленная прямоугольником отсечения, является «новой» или «измененной» областью, а не видимой областью, это сделано по соображениям оптимизации…

Комментарии:

1. Ага .. итак, я должен установить для панели preferredSize размер моего чертежа и использовать область отсечения, чтобы знать, что рисовать? Я правильно вас понял? (извините за задержку, я нашел ваш ответ сегодня)

2. В принципе, да. Вам нужно будет поиграть с этим, но концепция должна работать…