我是新手。我在这里有一个代码,我希望将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!)。 肯定会得到帮助!
答案 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
答案 1 :(得分:0)
首先,未初始化的整数(例如x和y)的默认值为零。但依靠这一点并不是一种好的做法;最好显式初始化它们的值,即使它仍为零。
接下来,您的mouseMoved()回调实际上已被调用。但它没有更新你的位置文字框架的文字。标签,它只更新x和y坐标。仅仅因为您使用字符串(位置)创建了标签,并不意味着只要更改了字符串,标签的文本就会自动更改。您必须相应地更改标签的文本。所以添加positionsOnFrame.setText(" Positions:" + x +"," + y);在你的mouseMoved()回调中将修复该部分。
最后,直接更改框架内容窗格而不是框架的颜色:getContentPane()。setBackground(Color.BLACK);
希望有所帮助!