0

mouseMotionListenerがmouseDraggedイベントを発生させない理由を誰か教えてください(私は何時間もグーグルで検索し、ネットからコードをコピーアンドペーストしました!)以下はクラスのコードです-クラスのオブジェクトを作成して追加しますcanvas という JPanel に。

PS は、mousePressed() が起動される唯一のメソッドであり、mouseDragged() と mouseReleased() は起動しません。

class MouseActions extends MouseInputAdapter 
{
        @Override
        public void mousePressed(MouseEvent e) 
        {
            super.mousePressed(e);//245 220
            java.awt.Point Pos = e.getPoint();
            System.out.println("at Mouse Pressed, Again");
            if(e.getButton() == MouseEvent.BUTTON3)
            {
                if(ArrayOfShapes == null)
                    return;

                for(int i = 0; i < ArrayOfShapes.length; i++)
                {
                    if(hasEntered(ArrayOfShapes[i], Pos))
                    {
                        removeAtIndex(i);
                        return;
                    }
                }
            }
        }

        @Override
        public void mouseDragged(MouseEvent e) 
        {
           System.out.println("at Mouse Dragged");
            int MovableIndex = -1;
            java.awt.Point Pos = e.getPoint();

            if(e.getButton() == MouseEvent.BUTTON1)
            {
                bDragged = true;

                while(bDragged)
                {
                    for(int i = 0; i < ArrayOfShapes.length; i++)
                    {
                        if(hasEntered(ArrayOfShapes[i], Pos))
                        {
                            MovableIndex = i;
                            break;
                        }
                    }
                    ArrayOfShapes[MovableIndex].setX(e.getX());
                    ArrayOfShapes[MovableIndex].setY(e.getY());
                    thisCurrentWindow.repaint();
                }
            }
        }

        @Override
        public void mouseReleased(MouseEvent e) 
        {
            System.out.println("at Mouse Release");
            bDragged = false;
        }

    }

/// リスナーを追加するコード

MouseActions MA = new MouseActions();
canvas.addMouseListener(MA);
canvas.addMouseMotionListener(MA);

またよろしくお願いします〜

M

追伸....私の狂った継承スキルを疑っているすべての人のために

import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;


public class CustomJPanel extends JPanel
{
    class MouseActions extends MouseInputAdapter
    {

        @Override
        public void mousePressed(MouseEvent e) 
        {
            super.mousePressed(e);
            System.out.println("Pressed");
        }

        @Override
        public void mouseDragged(MouseEvent e) 
        {
            super.mouseDragged(e);
            System.out.println("Dragged");
        }

        @Override
        public void mouseReleased(MouseEvent e) 
        {
            super.mouseReleased(e);
            System.out.println("Released");
        }
    }

    /**
     * @param args the command line arguments
     */

    private CustomJPanel()
    {
        MouseActions ma = new MouseActions();
        addMouseListener(ma);
        addMouseMotionListener(ma);
    }

    public static void main(String[] args) 
    {
        // TODO code application logic here
        JFrame frame = new JFrame();
        CustomJPanel cP = new CustomJPanel();

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cP.setSize(500, 500);
        frame.add(cP);
        frame.setVisible(true);
    }
}

繰り返しますが、これをキャンバスに割り当てると、リリースやドラッグが発生することはありません

M

4

4 に答える 4

1

while(bDragged)のループは無限ループのように見えます

于 2012-04-10T20:50:19.873 に答える
0

恐ろしいことに、コーディングされたとおりに作業しました....コードの後半を除いて、キャンバスを削除して再作成しましたが、MIAを再割り当てするのを忘れていました。

ご助力いただきありがとうございます、

M

于 2012-04-11T18:32:11.197 に答える
0

私が見る限り、マウスリスナーを実装する必要があります。参照: http://profs.etsmtl.ca/mmcguffin/learn/java/04-mouseInput/

于 2012-04-10T20:43:26.447 に答える
-2

私はこれを行います:

class MouseActions implements MouseMotionListener, MouseListener
{
..
..
}

canvas.addMouseListener(new MouseActions ());
canvas.addMouseMotionListener(new MouseActions() );

そしてそれはおそらくうまくいくでしょう。

于 2012-04-10T20:44:09.130 に答える