0

我是这里的新手。我在这里有一个代码,我想将 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!)。帮助肯定会很感激!

4

2 回答 2

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每次x和更改时,字符串都不会y更改。该值将与您最初分配时的值保持x一致y

例如

String s = "hello";

    String t = s;

    System.out.println(t);

    s = "bye";

    System.out.println(t);

将打印hello两次

于 2017-09-27T15:46:42.177 回答
1

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

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

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

希望有帮助!

于 2017-09-27T15:53:47.503 回答