鼠标 - Motion Listener无法正常工作

时间:2017-09-27 15:31:07

标签: java mouse mousemotionlistener

我是新手。我在这里有一个代码,我希望将JLabel的文本更改为移动鼠标的位置。这是我的代码。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class Draw extends JFrame{

    int x;
    int y;

    String positions = "Positions: " + x + ", " + y;
    JLabel positionsOnFrame = new JLabel(positions);

    public class AL implements MouseMotionListener {

        public void mouseMoved(MouseEvent e) {
            x = e.getX();
            y = e.getY();

        }


        public void mouseDragged(MouseEvent e) {
            positions += " dragged.";
        }
    }

    //Constructor
    public Draw() {
        setTitle("Title");
        setBackground(Color.BLACK);
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        addMouseMotionListener(new AL());
        add(positionsOnFrame);

        setVisible(true);
    }

    public static void main(String[] args) {
        new Draw();
    }
}

边问题:即使我从构造函数中将颜色设置为黑色,JFrame也不会变黑。

鼠标问题的任何解决方案?什么都没发生!值只是设置为0! (我没有初始化它们,它们只是自动设置为0!)。 肯定会得到帮助!

2 个答案:

答案 0 :(得分:0)

这应该有效

public void mouseMoved(MouseEvent e) {
        x = e.getX();
        y = e.getY();
        positionsOnFrame.setText("Positions: " + x +", " + y);
        System.out.println(x);
    }

并且背景颜色应该有用。

getContentPane().setBackground(Color.BLACK);

每次positionsx更改时,字符串y都不会更改。该值将与您最初分配时的xy保持一致。

例如

String s = "hello";

    String t = s;

    System.out.println(t);

    s = "bye";

    System.out.println(t);

将同时打印hello

答案 1 :(得分:0)

首先,未初始化的整数(例如x和y)的默认值为零。但依靠这一点并不是一种好的做法;最好显式初始化它们的值,即使它仍为零。

接下来,您的mouseMoved()回调实际上已被调用。但它没有更新你的位置文字框架的文字。标签,它只更新x和y坐标。仅仅因为您使用字符串(位置)创建了标签,并不意味着只要更改了字符串,标签的文本就会自动更改。您必须相应地更改标签的文本。所以添加positionsOnFrame.setText(" Positions:" + x +"," + y);在你的mouseMoved()回调中将修复该部分。

最后,直接更改框架内容窗格而不是框架的颜色:getContentPane()。setBackground(Color.BLACK);

希望有所帮助!