鼠标 - 运动监听器不工作
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);
字符串 positions
不会在每次 x
和 y
更改时更改。该值将保持 x
和 y
最初分配时的值。
例如
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);
希望对您有所帮助!
我是这里的新手。我这里有一个代码,我想从中将 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);
字符串 positions
不会在每次 x
和 y
更改时更改。该值将保持 x
和 y
最初分配时的值。
例如
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);
希望对您有所帮助!