2013-04-17 5 views
3

Есть ли какие-либо методы, которые я хочу увеличить для вида окна просмотра, но расположение компонентов внутри не меняется. Настройка заключается в том, что у меня есть большой jpanel внутри jscrollpane, в котором я хочу только изменить вид в увеличенный режим. объекты можно перетаскивать и опускать в любом месте внутри панели, поэтому важно, чтобы положение xy оставалось.JScrollPane Увеличить вид с компонентами внутри

вот мой нынешний код увеличения, что я делаю, я использую масштаб 2d для увеличения масштаба. проблема в том, что позиция беспорядок. Я также хочу уменьшить масштаб, чтобы вся панель соответствовала jscrollpane.

//zoom in draw method using scale 
g2.translate(zoomX, zoomY); 

g2.scale(zoomScale, zoomScale); 

g2.translate(-zoomX, -zoomY); 

Im также думает о том, чтобы манипулировать окном просмотра. вот моя инициализация видового экрана. Размер 2000 на 1000 - это панель, а 750 на 698 - экстензия моего окна просмотра. любое предложение о том, как я буду масштабировать, не нарушая положение компонентов? Возможно, перемещение setviewposition является частью решения?

view = new JViewport(); 

view.setViewSize(new Dimension(2000,1000)); 

view.setExtentSize(new Dimension(750,698)); 

view.setViewPosition(new Point(view.getExtentSize().width/2,view.getExtentSize().height/2)); 
+0

есть масштабирование в JScollPane, разрешенное несколько раз, включая центрирование по желаемой точке, пожалуйста, найдите здесь, – mKorbel

+0

да есть много решений масштабирования с использованием scrollpane, но на этот раз я хочу, чтобы это было похоже на функцию масштабирования карты Google, где весь jpanel внутри jscrollpane уменьшается только в представлении. Другие решения предназначены только для масштабирования jscrollpane с изображением, но не jscrollpane с компонентами внутри, которые можно перетаскивать и удалять внутри панели. С его помощью можно масштабировать масштабируемое приложение, которое может быть использовано при масштабировании, а также маршрутизаторы и коммутаторы cisco. –

+0

не знаю, как кодируются Google Maps, но я думаю, что там есть о переключателе betweens, а не в реальном масштабировании, конечно, возможно, я ошибаюсь – mKorbel

ответ

0

Используйте две кнопки, которые увеличивают/уменьшают коэффициент масштабирования. Переопределите метод панели paintComponent панели JScrollPane следующим образом.

@Override 
public void paintComponent(Graphics g) 
{ 
    g.scale(zoomFactor, zoomFactor); 
    // Change the size of the panel 
    setSize(origWidth * zoomFactor, origHeight * zoomFactor); 
    // Re-Layout the panel 
    validate(); 
    super.paintComponent(g); 
} 

Надеюсь, он сработает.

+0

вид масштабирования работает, но положение xy компонента внутри остается. где, если вы нажмете на значок объекта, объект не находится в этой позиции. положение xy остается даже при увеличении. –

+0

Отредактировано. Попробуй. –

+0

все еще не работает хорошо сэр, просмотр зум работает, но мне не нужно просто масштабировать графику и объекты, которые можно перетаскивать. Я думаю, что это имеет какое-то отношение к окну просмотра или его мнению. где он будет настраивать только представление, но не панель. –