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);
}

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

Другие вопросы по тегам