2

この質問はおそらくSwingの知識の欠如の根底にあると思われますが、私が間違っていることを特定することはできないようです。基本的に、1つのコンポーネントでmousePressedを検出し、元のコンポーネントではなく、リリース時にマウスの下にあるすべてのコンポーネントのmouseReleasedを受け取ります。

import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;
import net.miginfocom.swing.MigLayout;

public class TestMouseListener extends MouseInputAdapter {

    public void mouseEntered(MouseEvent arg0) {System.out.println("Entered " + arg0.getComponent());}
    public void mouseExited(MouseEvent arg0) {System.out.println("Exited " + arg0.getComponent());}
    public void mousePressed(MouseEvent arg0) {System.out.println("Pressed " + arg0.getComponent());}
    public void mouseReleased(MouseEvent arg0) {System.out.println("Released " + arg0.getComponent());}

    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setLayout(new MigLayout());
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        TestPanel panel1 = new TestPanel("Panel 1");
        TestPanel panel2 = new TestPanel("Panel 2");
        panel1.add(new JLabel("Text1"));
        panel2.add(new JLabel("Text2"));
        frame.add(panel1);
        frame.add(panel2);
        TestMouseListener listener = new TestMouseListener();
        panel1.addMouseListener(listener);
        panel1.addMouseMotionListener(listener);
        panel2.addMouseListener(listener);
        panel2.addMouseMotionListener(listener);
        frame.setVisible(true);
    }
}
class TestPanel extends JPanel {
    String name;
    TestPanel(String name){ this.name = name; }
    public String toString(){ return name; }
}

したがって、パネル1の上にマウスを置いてクリックし、パネル2にドラッグして放すと、次のようになります。

Entered Panel 1
Pressed Panel 1
Exited Panel 1
Entered Panel 2
Released Panel 1

リリースしたパネルを入手するにはどうすればよいですか?panel 2でmouseReleasedイベントが発生することを期待していましたが、明らかに発生しません。

4

1 に答える 1

5

最後に入力したコンポーネントを保持する変数を保存します。MouseEnteredイベントをトリガーするたびに上書きし続けます。次に、メソッドを作成して、マウス ボタンを放したときに、最後に入力したコンポーネントを使用できるようにします。

Component lastEntered;

private void MouseEntered(MouseEvent e) {
    lastEntered = e.getComponent;
}
于 2012-07-13T18:48:16.267 に答える