#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. В принципе, да. Вам нужно будет поиграть с этим, но концепция должна работать…