繁体   English   中英

鼠标-运动监听器不起作用

[英]Mouse - Motion Listener not working

我是这里的新手。 我在这里有一个代码,希望将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!)。 帮助将不胜感激!

这应该工作

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

对于背景色,这应该起作用。

getContentPane().setBackground(Color.BLACK);

每次xy更改时,字符串positions都不会更改。 该值将与最初分配xy时的值相同。

例如

String s = "hello";

    String t = s;

    System.out.println(t);

    s = "bye";

    System.out.println(t);

会两次hello

首先,未初始化的整数(例如x和y)的默认值为零。 但是依靠它不是一个好习惯。 最好即使它们仍然为零,也要显式初始化它们的值。

接下来,实际上将调用mouseMoved()回调。 但这不是在更新“ positionsOnFrame”标签的文本,而是在更新x和y坐标。 仅仅因为您使用字符串(位置)创建了标签,并不意味着标签的文本将在更改字符串时自动更改。 您必须相应地更改标签的文本。 因此,添加positionsOnFrame.setText(“ Positions:” + x +“,” + y); 在mouseMoved()回调内部将修复该部分。

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

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM