JScrollPane Zoom view с компонентами внутри
Есть ли какие-либо методы, которые я хочу, чтобы увеличить вид области просмотра, но расположение компонентов внутри не меняется. Настройка заключается в том, что у меня большая jpanel внутри jscrollpane, в которой я хочу только изменить вид в увеличенном режиме. объекты можно перетаскивать в любое место внутри панели, поэтому важно, чтобы их положение ху сохранялось.
Вот мой нынешний код масштабирования, я использую масштаб 2D-графики для увеличения масштаба. проблема в том, что положение беспорядок. Я также хочу уменьшить его так, чтобы вся панель соответствовала jscrollpane.
//zoom in draw method using scale
g2.translate(zoomX, zoomY);
g2.scale(zoomScale, zoomScale);
g2.translate(-zoomX, -zoomY);
Я также думаю о манипуляциях с окном просмотра. вот моя инициализация окна просмотра. размерность 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));
1 ответ
Используйте две кнопки, которые увеличивают / уменьшают коэффициент масштабирования. Переопределить 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);
}
Надеюсь, что это работает.