• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MouseEventおよびMouseListenerについて、、)

MouseEventとMouseListenerについての質問

このQ&Aのポイント
  • JAVAの初心者がMouseEventとMouseListenerを使って画像のマウス距離測定プログラムを作成していますが、mouseReleasedメソッドの戻り値の扱いとMouseEventの終了方法について困っています。
  • mouseReleasedメソッドで測定した距離を他のクラスで使用する方法について教えてください。
  • MouseEventの終了(mouseReleased時に終了)させるための方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

1.変数Line(doubleかな?)をクラス変数にしてアクセサ(getLine()メソッドとか)を用意して外からはgetLine()メソッドを介してLineの値をとるようにすれば良いのではないかな。 2.MouseEventSourceが1度mousePressed→mouseReleasedを実行すると後はもう要らないという事かな? それならmouseReleasedでremoveMouseListenerを呼んでやるとどうなるだろうか(未検証)。まぁ、それよりも状態管理で制御してやる方が良いと思う。例えば、マウスプレス待ち、マウスリリース待ち、マウスイベント開始待ち、など。 ・マウスイベント開始待ち:押しても離しても何も起こらず。 ・マウスプレス待ち:押したらマウスリリースイベント待ちへ、離しても何も起こらない。 ・マウスリリース待ち:押しても何も起こらない、話したら距離を算出してマウスイベント開始待ちへ

kio23
質問者

お礼

1、getLine()メソッドを介して、外からLine値をとることができました。 2、mouseReleased()でremoveMouseListener()にて、MouseEventが停止いたしました。。 大変参考になりました。 ほんとうにありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 内部クラスにする方法教えてください!

    import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Line extends JPanel { int x0, y0, x1, y1; public static class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static class ClickTracker extends MouseAdapter { private Line line; public ClickTracker(Line enclosing) { line = enclosing; } public void mouseClicked(MouseEvent e) { line.x0 = line.x1; line.y0 = line.y1; line.x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得 line.y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得 line.repaint(); // ウィンドウの表示を再描画 } } public Line() { x0 = y0 = x1 = y1 = 0; addMouseListener(new ClickTracker(this)); JFrame frame = new JFrame(); frame.addWindowListener(new WindowCloser()); frame.getContentPane().add(this); frame.setSize(300,300); frame.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(x0, y0, x1, y1); } public static void main(String[] args) { Line c = new Line(); } } 上のプログラムのClickTrackerクラスを内部クラスに書き換えたいんですけどどなたか教えてください!

    • ベストアンサー
    • Java
  • MouseEventを使った時間計測について

    これまでJavaは使ったことないのですが、卒研で使うことになり今必死になってやっております。 早速ですが、今drawLineメソッドとMouseEventを使って自由曲線を描くものを作ってみました。 これに、mousePressed時に時間計測を開始し、mouseReleased時に一旦停止。 そして、それを足し合わせて合計時間を出したいのですが調べてもよくわかりません。よろしくお願いします。 下記は、現段階ものです。 ・J2SDK1.4.2.15 class DrawPanel extends Panel implements MouseListener,MouseMotionListener { Vector shapes = new Vector(); int x1,y1; public DrawPanel() { setForeground(Color.black); setBackground(Color.white); addMouseMotionListener(this); addMouseListener(this); } public void mousePressed(MouseEvent e) { e.consume(); x1 = e.getX(); y1 = e.getY(); shapes.addElement(new Rectangle(x1,y1,x1,y1)); paint(getGraphics()); } public void mouseDragged(MouseEvent e) { e.consume(); shapes.addElement(new Rectangle(x1,y1,e.getX(),e.getY())); x1 = e.getX(); y1 = e.getY(); paint(getGraphics()); } public void paint(Graphics g) { int number = shapes.size(); for (int i = 0;i < number;i++) { Rectangle data = (Rectangle)shapes.elementAt(i); g.drawLine(data.x,data.y,data.width,data.height); } } }

    • ベストアンサー
    • Java
  • 【アプレット】マウスイベントについて

    【アプレット】マウスイベントについて 現在、マウスに円をリンクさせています 1回左クリックするとその場所で円が停止し、もう1回左クリックするとまた動きだし、もう1回左クリックするとその場所で円が停止し、・・・の繰り返しを行いたいです なにかアドバイスをください。 作ってるのに近いプログラム ↓ import java.applet.* ; import java.awt.*; import java.awt.event.*; public class test extends Applet { int posX = 50; int posY = 50; public void paint(Graphics g) { g.setColor(Color.red); g.fillOval(posX, posY, 50, 50); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void init () { this.setSize(200, 200); this.setVisible(true); addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent e) { posX = e.getX(); posY = e.getY(); repaint(); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } }); } }

  • ペイントソフトを作っているのですが・・・

    簡単な絵を書くプログラムを下のようにつくりました。 こんなようなソースが公開されているサイトをご存知のかたは教えていただけないでしょうか?? おねがいします!! import java.awt.*; import java.awt.event.*; public class mouse5 extends Frame implements MouseListener , MouseMotionListener{ //グローバル変数 int x0,y0; Color objectColor = Color.red; //コンストラクタ public mouse5(){ setSize(400,300); //マウスイベント addMouseListener(this); addMouseMotionListener(this); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } //paint public void paint(Graphics g){ } //マウスが押されたら public void mousePressed(MouseEvent e){ //始点の座標 x0 = e.getX(); y0 = e.getY(); } //マウスが放されたら public void mouseReleased(MouseEvent e){ } //マウスがクリックされたら public void mouseClicked(MouseEvent e){ } //マウスが画面に入ったら public void mouseEntered(MouseEvent e){ } //マウスが画面から出たら public void mouseExited(MouseEvent e){ } //マウスがドラックされたら public void mouseDragged(MouseEvent e){ //線を引く Graphics g = getGraphics(); g.drawLine(x0,y0,e.getX(),e.getY()); g.dispose(); //次のために始点を更新 x0 = e.getX(); y0 = e.getY(); } //マウスが動いたら public void mouseMoved(MouseEvent e){ } //main public static void main(String[] args) { Frame w = new mouse5(); w.show(); } }

    • ベストアンサー
    • Java
  • アプレットで簡単な絵を描きたい

    drawLineメソッドを使用してマウスで絵を描きたいのですがうまくいきません。どうすればいいでしょうか? 一応私が途中まで考えたソースを下に載せておきます。 できればこのソースを変更して完成できればよく理解できるのでよろしくお願い致します。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class MyGraphics2 extends Applet implements MouseListener{ private int startX; private int startY; private int startX2; private int startY2; private boolean flg; public void init(){ addMouseListener(this); } public void mouseClicked(MouseEvent e){ } public void mousePressed(MouseEvent e){ flg = true; startX = e.getX(); startY = e.getY(); } public void mouseReleased(MouseEvent e){ flg = false; } public void mouseMoved(MouseEvent e){ System.out.println(flg); if(flg == true){ System.out.println(flg); startX2 = e.getX(); startY2 = e.getY(); repaint(); startX = e.getX(); startY = e.getY(); } } public void mouseEntered(MouseEvent e){} public void update(Graphics e){ e.drawLine(startX, startY,startX2, startY2); } public void mouseExited(MouseEvent e){} }

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • java リアルタイムでマウスの座標を取得したい

    マウスのリアルタイム座標を取得したいのですが、 以下のソースを作りました。 しかし、リアルタイムどころか、マウスをクリックしても座標が取得できません どこを修正すればいいのでしょうか? import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.net.URL; import java.awt.Image; /*<applet code="applet001" width="640" height="480"></applet>*/ public class applet001 extends Applet implements MouseListener, MouseMotionListener { Dimension dim; int mouse_x, mouse_y; //アプレットの初期化時呼び出される public void init() { dim = getSize(); addMouseListener( this ); } public void update(Graphics g) //オーバーライドして最低限のことだけをする { paint(g); } public void paint(Graphics g) { g.drawString( "マウス:" + mouse_x + "," + mouse_y, 60, 120 ); g.fillOval(mouse_x,mouse_y,30,30); } // マウスの処理 public void mousePressed( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); } public void mouseClicked( MouseEvent e ) {} public void mouseReleased( MouseEvent e ) {} public void mouseEntered( MouseEvent e ) {} public void mouseDragged( MouseEvent e ) {} // public void mouseExited( MouseEvent e ) {} // public void mouseMoved( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); repaint(); } }

    • ベストアンサー
    • Java
  • JAVAのアプレットのアニメーションの質問

    javaのアプレットに関する質問なんですが、今次の条件でアニメーションを作っているんですが、どうしても解決できない問題があります。 赤い長方形が左から右に動いていくプログラムを作成する。 ・ 長方形が描画領域 の右端に消えると左端から再 度出現するようにせよ。 ・ Reverseと書かれたボタンを押すと長方形の進行方 向が左右反対になる。 ・ このとき、左右どちらの端に長方形が消えた場合も 反対端から長方形は出現する。 ・ 長方形をクリック(ボタン押下)すると長方形の色が 変化する。 ・ 赤い長方形であれば青に、青い長方形であれば赤 に変化する。 この条件でつくろうと思っているのですが、長方形をクリックしたときに、色の変化がどうしてもできません。どこに問題があるか分かりません。御教授お願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.Button; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; public class Report2 extends Applet implements Runnable,ActionListener,MouseListener{ int x=100; int y=50; int width=80; int height=120; int dir=-2; int w; int z; Button bt; boolean direction; boolean colorRed; public void actionPerformed(ActionEvent ae){ if(direction==true){ direction=false; } else{ direction=true; } } public void init(){ bt=new Button("Reverse"); add(bt); bt.addActionListener(this); Thread th; th =new Thread(this); th.start(); addMouseListener(this); } public void mouseClicked(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mousePressed(MouseEvent e){ w=e.getX(); z=e.getY(); repaint(); if(e.getX()>=x && e.getX()<=x+width && e.getY()>=y && e.getY()<=y+height){ colorRed=!colorRed; } } public void run() { while(true){ x++; if(x==400){ x=-80; } if(direction==true){ x=x+dir; } else{ } repaint(); try{ Thread.sleep(30); } catch(InterruptedException e){} } } public void paint(Graphics g){ g.setColor(Color.white); g.fillRect(0,0,400,200); g.setColor(Color.red); g.fillRect(x,y,80,120); if(colorRed=true){ g.setColor(Color.red); } if(colorRed=false){ g.setColor(Color.blue); } g.fillRect(x,y,width,height); g.setColor(Color.black); g.fillRect(x,y,10,10); } }

    • ベストアンサー
    • Java
  • オブジェクト指向のエラーについてです。

    オブジェクト指向のエラーについてです。 初めて質問するので、至らない点があれば、スミマセンm(_ _)m コンパイルしようすると、 DrawPanelMouseHandler.java:10: シンボルを見つけられません。 シンボル: クラス DrawPanel 場所 : DrawPanelMouseHandler の クラス private DrawPanel drawPanel; と、なります。 上記と同様のエラーが上記を含め、9つ発生します。 どうしたらよいのでしょうか? 以下ソースです。 import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class DrawPanelMouseHandler extends MouseAdapter { private DrawPanel drawPanel; private ShapeFactory factory; private int x0; private int y0; private Shape shape; public DrawPanelMouseHandler(DrawPanel dp, ShapeFactory factory) { this.drawPanel = dp; this.factory = factory; } public DrawPanelMouseHandler(DrawPanel dp) { this.drawPanel = dp; } public void mousePressed(MouseEvent me) { x0 = me.getX(); y0 = me.getY(); shape = factory.newShape(x0, y0); drawPanel.addShape(shape); } public void mouseDragged(MouseEvent me) { int x = me.getX(); int y = me.getY(); shape.setBoundary(x0, y0, x, y); drawPanel.repaint(); } public void mouseReleased(MouseEvent me) { int x = me.getX(); int y = me.getY(); shape.setBoundary(x0, y0, x, y); drawPanel.removeShape(shape); Command cmd = new CommandAddShape(drawPanel, shape); drawPanel.execute(cmd); } public void setShapeFactory(ShapeFactory sf) { this.factory = sf; } } よろしくお願いします。

    • ベストアンサー
    • Java