2016-10-29 4 views
1

ポイント(0,0)がパネルの中央に位置する座標系を開発していますが、デフォルト(0,0)座標マウスの座標は表示されなくなります。このコード行がないと "ga.translate(175.0,125.0)"というプログラムが動作します。この問題をどのように修正できますか?ありがとうございます。あなたがGraphicsオブジェクトの(一定の)値を操作座標系を再変換するために翻訳を使用した後にマウス座標が機能しなくなる - java

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JLabel; 

public class Main extends JPanel implements MouseMotionListener { 
    public JLabel label; 
    //@Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D ga = (Graphics2D) g; 
     ga.translate(175.0, 125.0); //the mouse coordinates stop displaying with this code 
     ga.drawLine(0, 0, 100, 100); 
    } 
    public static void main(String[] args) { 
     Main m = new Main(); 
     GraphicsDraw D = new GraphicsDraw(); 
     JFrame frame = new JFrame(); 
     frame.setTitle("MouseCoordinates111"); 
     frame.setSize(400, 400); 
     frame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent we) { 
       System.exit(0); 
      } 
     }); 
     Container contentPane = frame.getContentPane(); 
     contentPane.add(m); 
     frame.setVisible(true); 
    } 
    public Main() { 
     setSize(400, 400); 
     label = new JLabel("No Mouse Event Captured", JLabel.CENTER); 
     add(label); 
     //super(); 
     addMouseMotionListener(this); 

    } 
    @Override 
    public void mouseMoved(MouseEvent e) { 
     //System.out.println(e.getX() + "/" + e.getY()); 
     label.setText("Mouse Cursor Coordinates => X:" + e.getX() + " |Y:" + e.getY()); 
    } 
    @Override 
    public void mouseDragged(MouseEvent e) {} 
    public void mouseClicked(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 

    } 

} 

答えて

3

(並進のように、変換)いつでも元の状態に復元する必要があります。

これを行う簡単な方法は、あなたの絵に行う一時的Graphicsオブジェクトを作成することです:

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

    //Graphics2D ga = (Graphics2D) g; 
    Graphics2D ga = (Graphics2D)g.create(); 

    ga.translate(175.0, 125.0); //the mouse coordinates stop displaying with this code 
    ga.drawLine(0, 0, 100, 100); 

    ga.dispose(); 
} 
+0

コードは動作しますが、マウスがパネルの左上に表示(0,0)の座標が、翻訳後のポイント(175.0、125.0)に(0,0)を表示するにはマウス座標が必要です。 – dkchetan

+0

@dkchetanはい、ペイントメソッドでの変換は、MouseEventの実際のマウス座標には影響しません。 MouseイベントのPointを手動で変換する必要があります。だから基本的に私はこの要件の根拠を理解していない。すべてのマウス処理ロジックにオーバーヘッドが加わります。 – camickr

関連する問題