2012-04-09 36 views
1

私はJScrollPaneで囲まれたJPanelを持っています。このJPanelはイメージを表示するために使用されます。私はzoomIn、zoomOut、clockwiseRotate、およびantiClockwiseRotateのような機能を提供する必要があります。これらの機能はすべて個々にうまく機能しています。ズームについては、グラフィックスオブジェクトのスケールを呼び出します。これは、左上から右下のベースで発生します。回転のために、私はスケールをリセットし、変換、回転&グラフィックスオブジェクトを翻訳し直します。しかし、ズームと回転を組み合わせると、動作が異なります。たとえば、時計回りに回転し、イメージは1.57079633ラジアン(約90度)に回転します。ズームを押すと、画像がズームされますが、ズームは左上と右下の基準ではなく、右上と左下に基づいて行われます。画像を時計回りにもう一度回転させると、ズームをリセットします。つまり、イメージを元のサイズに拡大し、グラフィックスオブジェクトを翻訳、回転、翻訳し直します。ズームをもう一度押すと、右下と左上の基準に基づいてズームインされます。Java Swingの回転とズーム

したがって、パネルの座標が変更されたときにイメージの座標が変更されないという問題があります。誰かがイメージの座標を変更するのに私を助けてくれる?

public void paint(Graphics g) 
{  
    Graphics2D g2d = (Graphics2D)g; 
    g2d.translate((tempWidth/2), (tempHeight/2)); 
    g2d.rotate(m_rotate); 
    g2d.translate(-(tempWidth/2), -(tempHeight/2)); 
    g2d.scale(m_zoom, m_zoom); 
    if(this.image != null && this.image.getHeight(null) > 0) 
    { 
     g2d.drawImage(this.image, 0, 0,302,312,this);   
    } 
    else 
    { 
     g2d.drawString("View Image Here!. ", 20, 20); 
    }  
} 
+0

http://stackoverflow.com/questions/10040502/zoom-panel-in-java-appliction/10040546#10040546 – StanislavL

+0

1)早いほど良いのヘルプについては、[SSCCE](HTTPを投稿:// sscce .org /)。 2) 'paint()'ではなく 'JPanel'で' paintComponent() 'をオーバーライドします3)' this.image.getHeight(null) 'は' this.image.getHeight(this) 'でなければなりません –

+0

これも見てください[答え](http://stackoverflow.com/a/4292509/230513)。 – trashgod

答えて

0

ありがとうございました。それは私が問題を解決するのを助けた新しい次元で考えるようになった。私がしたのは、回転する前に画像を拡大するだけで、今はうまく動いています。

public void paint(Graphics g) 
{   
    Graphics2D g2d = (Graphics2D)g; 
    g2d.scale(m_zoom, m_zoom);//This is what made the magic  
    g2d.translate((tempWidth/2), (tempHeight/2));  
    g2d.rotate(m_rotate);  
    g2d.translate(-(tempWidth/2), -(tempHeight/2)); 
    /*g2d.scale(m_zoom, m_zoom); removed this and placed above */ 
    if(this.image != null && this.image.getHeight(null) > 0)  
    {   
     g2d.drawImage(this.image, 0, 0,302,312,this); 
    } 
    else 
    {   
     g2d.drawString("View Image Here!. ", 20, 20); 
    }  
} 
関連する問題