2017-09-26 11 views
0

マウスのドラッグイベントをシミュレートできますか? JPanelから継承したカスタムビューがあり、mouseDraggedメソッドを実装したmouseMotionListenerを追加しました。さて、実際にマウスを使用するのではなく、ドラッグされたように動作するように、このコンポーネントのマウスドラッグイベントを定義する(新規)必要があります。 Oracle.comでsearch MouseEventクラスが見つかりましたが、マウスでドラッグしたイベントを自分で定義することはできません。アイデアを教えてください。 私は法をドラッグこれは、マウスを実装して、私のカスタムビューで、ここに私のコードだ、 を例プログラムを実装している:のRectが含まれている、あなたはRECTをドラッグすることができますマウスの代わりにプログラムでマウスドラッグイベントを自動的にシミュレート(定義)する方法

public class Rect extends JLabel { 
private int width, height; 
private String title; 
public int interWidth = 1500; 
public int interHeight = 1000; 
private JFrame frame; 
private MouseMotionAdapter myAdapter; 
private MouseListener myListener; 

public Rect(int width, int height, String title, JFrame frame) { 
    this.width = width; 
    this.height = height; 
    this.title = title; 
    setText(this.title); 
    this.frame = frame; 
    this.myAdapter = new MouseMotionAdapter(){ 
     @Override 
     public void mouseDragged(MouseEvent me) { 
      System.out.println("dragged"); 
      me.translatePoint(me.getComponent().getLocation().x, me.getComponent().getLocation().y); 
      setLocation(me.getX(), me.getY()); 
      frame.repaint(); 
     } 
    }; 
    this.myListener = new MouseListener(){ 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      // TODO Auto-generated method stub 
      System.out.println("click"); 
     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mouseExited(MouseEvent e) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      // TODO Auto-generated method stub 
      System.out.println("press"); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      // TODO Auto-generated method stub 
      System.out.println("release"); 

     } 

    }; 
    addMouseMotionListener(this.myAdapter); 
    addMouseListener(this.myListener); 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.setColor(Color.black); 
    g.drawRoundRect(0, 0, this.width - 1, this.height - 1, 20, 20); 
} 

public void setWidth(int width) { 
    this.width = width; 
} 

public void setHeight(int height) { 
    this.height = height; 
} 

public int getWidth() { 
    return width; 
} 

public int getHeight() { 
    return height; 
} 

public MouseMotionAdapter getMyAdapter() { 
    return myAdapter; 
} 

public MouseListener getMyListener() { 
    return myListener; 
} 

}

これは、メインフレームであります

public class MainFrame extends JFrame { 

private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainFrame frame = new MainFrame(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public MainFrame() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 648, 518); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 

    Rect rect = new Rect(120,120,"example",this); 
    contentPane.add(rect); 

    Robot robot = new Robot(); 
    Point point = new Point(200,200); 
    robot.mouseMove(point.x,point.y); 
    robot.mousePress(InputEvent.BUTTON1_MASK); 
    robot.mouseMove(300, 300); 
    robot.mouseRelease(InputEvent.BUTTON1_MASK); 
} 

}

+1

試してみてください。 mousePressedイベントの後にmouseMovedイベントを生成し、その後にmouseReleasedイベントを生成します。何が起こるかを見て、あなたの結果を教えてください。 – camickr

+0

私はどのようにフィットするMouseEventを新しくするのかわかりません.... – lution

+0

Robotクラスを使用してフォーラム/ Webを検索してください。 – camickr

答えて

0
Robot robot; 
try { 
    robot = new Robot(); 
    Point point = rect.getLocationOnScreen(); //rect is my custom view 
    robot.mouseMove(point.x,point.y); 
    robot.mousePress(InputEvent.BUTTON1_MASK); 
    robot.mouseMove(point.x + 1,point.y + 1); 
    robot.mouseRelease(InputEvent.BUTTON1_MASK);//press+move+release = drag 
} catch (AWTException e1) { 
    e1.printStackTrace(); 
} 
:マウスで、私はプログラムによるドラッグイベントをシミュレートしたいです
関連する問題