java берет координаты мыши с естественного экрана и отображает их в графическом интерфейсе

Во-первых, я плохо знаю английский.

Я хочу сделать окно и иметь 2 метки и 2 поля. Одна метка для координаты x и 1 для координаты 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;
    }
}

person Community    schedule 23.05.2015    source источник


Ответы (1)


чтобы закрыть окно, используйте

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. это в основном проверяет, двигалась ли мышь, и если это не так, она устанавливает метку только один раз. Если это так, он обновит метку.

person ArcWalrus    schedule 23.05.2015
comment
И как оп проверяет, сдвинулась ли мышь - person MadProgrammer; 23.05.2015
comment
я не могу понять, где и как я помещаю windowVariable.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)... Предполагается, что если код входит в цикл for и никогда не выходит, тогда окно не может закрыться. Но если вы выходите из цикла тогда вы перестанете получать координаты, что означает остановку работы программы. Итак, проблема в том, что я хочу закрыть окно, даже если я нахожусь в цикле. - person ; 23.05.2015
comment
setDefualtCloseOperation() должен идти в конце основного метода - person ArcWalrus; 23.05.2015
comment
нет. это не работает IDE, говорят, что метод не определен. Также мне нужна переменная окна, а в основном методе не может быть переменная окна, потому что окно (и переменная окна), созданное с помощью конструктора... - person ; 24.05.2015