java从自然屏幕获取鼠标坐标并在GUI

时间:2015-05-23 02:09:41

标签: java mouse mouseclick-event

首先,我不懂英语。

我想制作一个窗口并有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;
    }
}

1 个答案:

答案 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做同样的事情。 这基本上检查鼠标是否已移动,如果没有,则只设置标签一次。如果有,它将更新标签。