【问题标题】:Mouse - Motion Listener not working鼠标 - 运动监听器不工作
【发布时间】:2018-03-09 04:12:51
【问题描述】:

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

【问题讨论】:

  • 对于颜色问题,请执行以下操作:getContentPane().setBackground(Color.BLACK);
  • 感谢您与我分享解决方案,但为什么我们必须调用 getContentPane() 来设置背景?提前致谢!

标签: java mouse mousemotionlistener


【解决方案1】:

这应该可以工作

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

对于背景颜色,这应该可以工作。

getContentPane().setBackground(Color.BLACK);

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

例如

String s = "hello";

    String t = s;

    System.out.println(t);

    s = "bye";

    System.out.println(t);

将打印hello 两次

【讨论】:

  • 非常感谢,它成功了!但是,您能否向我解释一下为什么我的代码不起作用以及我的代码中的错误是什么?编辑:刚刚看到您所做的编辑,感谢您花时间解释!
  • 查看我的答案的最后一部分,因为它不起作用。
【解决方案2】:

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

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

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

希望有帮助!

【讨论】:

  • 哇!你是最好的!太感谢了!但是......为什么不 setBackground(Color.BLACK);无需调用 getContentPane() 即可工作?
  • 这是因为内容窗格覆盖在 JFrame 之上。有关详细信息,请参阅如何使用根窗格:docs.oracle.com/javase/tutorial/uiswing/components/…
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 2012-07-31
  • 2013-07-20
  • 2014-12-13
  • 2014-02-21
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多