首先,我不懂英语。
我想制作一个窗口并有2个标签和2个字段。一个x坐标标签和一个y坐标标签。字段将显示x-y坐标。
坐标是来自全屏的鼠标(意思是从窗口外面)。
我更喜欢点击,但我已经从其他答案和问题中读到了这些不会按照我们的意愿行事(因为它失去了焦点)。所以我试着不去点击
我需要帮助我的代码,因为它有2个问题 - 错误:
1)窗口无法关闭
2)当鼠标不移动时,永远采取相同的坐标,我想要坐标1次,直到它移动为止。
这是完整的代码:
package mouseClick;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseEventDemo extends Frame implements MouseListener {
// Private variables
private TextField tfMouseX; // mouse-click-x
private TextField tfMouseY; // mouse-click-y
// Constructor
public MouseEventDemo() {
//handle the close-window button.
WindowDestroyer listener =new WindowDestroyer();
addWindowListener(listener);
setLayout(new FlowLayout()); // sets layout
// Label
add(new Label("X-Click: ")); // adds component
// TextField
tfMouseX = new TextField(10); // 10 columns
tfMouseX.setEditable(false); // read-only
add(tfMouseX); // adds component
// Label
add(new Label("Y-Click: ")); // adds component
// TextField
tfMouseY = new TextField(10);
tfMouseY.setEditable(false); // read-only
add(tfMouseY); // adds component
// fires the MouseEvent
addMouseListener(this);
setTitle("MouseEvent Demo"); // sets title
setSize(350, 100); // sets initial size
setVisible(true); // shows
}
public static void main(String[] args) {
new MouseEventDemo();
}
// MouseEvent handlers
public void mouseClicked(MouseEvent e) {
while (true){
tfMouseX.setText(Integer.toString(xmouse()));
tfMouseY.setText(Integer.toString(ymouse()));
}
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public class WindowDestroyer extends WindowAdapter {
public void windowClosing (WindowEvent e) {
System.exit(0);
}
}
public int xmouse() {
Point simiox = MouseInfo.getPointerInfo().getLocation();
int x= (int) simiox.getX();
return x;
}
public int ymouse() {
Point simioy = MouseInfo.getPointerInfo().getLocation();
int y=(int) simioy.getY();
return y;
}
}
答案 0 :(得分:0)
要关闭窗口,请使用
windowVariable.seDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
其中windowVariable是JFrame
的变量编辑:
要仅返回一次值,请尝试使用for循环和hasMoved布尔值。例如,
for (int i = 0; i < 1; i++){
tfMouseX.setText(Integer.toString(xmouse()));
if (hasMoved == true)
i = -1;
}
然后为y做同样的事情。 这基本上检查鼠标是否已移动,如果没有,则只设置标签一次。如果有,它将更新标签。