【问题标题】:Mousedragged is not being recognized鼠标拖动未被识别
【发布时间】:2013-06-01 20:08:58
【问题描述】:

谁能告诉我为什么鼠标拖拽在下面的代码中没有被识别,并可能帮助我解决这个问题?

public class Hello extends JPanel implements KeyListener, MouseListener, MouseMotionListener{
    JPanel panel = new JPanel();
    JFrame frame = new JFrame();
    public Hello() {
        addKeyListener(this);
        addMouseListener(this);
        addMouseMotionListener(this);
        panel.addKeyListener(this);
        panel.addMouseListener(this);
        frame.addKeyListener(this);
        frame.addMouseListener(this);
    }

    public static void main(String [] args){
        Hello play = new Hello();
        play.setPanel();
    }
    public void setPanel(){
        panel.setLayout(null);
        frame.add(panel);
        frame.setLayout(null);
        panel.setBounds(0,0,100,100);
        frame.setVisible(true);
        panel.setVisible(true);
        panel.setFocusable(true);
        frame.setSize(100,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void keyTyped(KeyEvent arg0){
        System.out.println("keytyped");
    }
    public void keyPressed(KeyEvent arg0){
        System.out.print("keypressed");
    }
    public void keyReleased(KeyEvent arg0){
        System.out.println("keyreleased");
    }
    public void mousePressed(MouseEvent arg0){
        System.out.println("mousepressed");
    }
    public void mouseReleased(MouseEvent arg0){
        System.out.println("mousereleased");
    }
    public void mouseClicked(MouseEvent arg0){
        System.out.println("mouseclicked");
    }
    public void mouseEntered(MouseEvent arg0){
        System.out.println("mousenentered");
    }
    public void mouseExited(MouseEvent arg0){
        System.out.println("mouseexited");
    }
    public void mouseDragged(MouseEvent arg0){
        System.out.println("mousedragged");
    }

【问题讨论】:

  • 您能否解决您的问题,以便我们可以在正确的代码文本中看到类声明和构造函数?

标签: java swing focus jpanel mousemotionevent


【解决方案1】:

面板具有焦点,因此您需要将 MouseMotionListener 添加到面板。

【讨论】:

    【解决方案2】:

    您为类的面板设置了一个 MouseMotionListener,但该面板不在焦点上。

        panel.addKeyListener(this);
        panel.addMouseListener(this);
        frame.addKeyListener(this);
        frame.addMouseListener(this);
    

    在这里,您为框架和面板提供了键和鼠标侦听器。然后在代码中进一步向下,将框架和面板设置为可见。 MouseMOTIONListener 剩下的唯一面板是不可见的结构面板。

        panel.addKeyListener(this);
        panel.addMouseListener(this);
        panel.addMouseMotionListener(this);
        frame.addKeyListener(this);
        frame.addMouseListener(this);
        frame.addMouseMotionListener(this);
    

    试一试,看看它会把你带到哪里。我已经很久没有使用 Swing 了,但我认为这可能会有所帮助。

    【讨论】:

    • -1,之前给出了相同的答案。无需用重复的答案使论坛混乱。另外,由于事件由面板侦听器处理,因此无需将 MouseMotionListener 添加到框架中。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多