3

描画しているJPanelがあり、可変スケールを変更してマウスホイールを使用して「ズームイン」および「ズームアウト」できるように、JPanelを取得しようとしています。現在、ズームインまたはズームアウトできますが、ズームインするとすべての図面が右下にシフトし、ズームアウトすると上下にシフトします。

JPanelの中​​心のポイントにズームインしているかのように調整するようにしたいのですが、変換する正しいオフセットを計算する方法がわかりません…

誰かがこれを行う方法、またはこのパンとズームの能力全体を達成するためのより良い方法についてのアイデアを持っていますか?

私は基本的に、0,0が左下隅にあり、境界の間にあるシステムから得られた一連の座標をプロットしています。

xMin = 661208
xMax = 662618

yMin = 4291657
yMax = 4293285

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;

    double scale = details.getScale();
    double xOffset = details.getxOffset();
    double yOffset = details.getyOffset();

    g2.scale(scale, -scale);

    // Dividing offset by scale makes panning 1:1 with the cursor still. yMax to account for the
    // fact we needed to flip around the y axis to make it right-side up.
    g2.translate((-xMin + xOffset / scale), (-yMax + yOffset / scale));

    // Code to draw stuff goes here.  It uses coordinates between xMin-xMax and yMin-yMax to draw.
    .
    .
    .
}
4

1 に答える 1