Java получить координаты курсора мыши

Модератор: Модераторы разделов

Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Java получить координаты курсора мыши

Сообщение zshgm »

Как на Java получить координаты курсора мыши в linux? (Глобально а не только в своем приложении)
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

zshgm писал(а):
06.08.2009 17:40
Глобально а не только в своем приложении

Если имееются ввиду координаты относительно левого верхнего угла экрана, то это можно сделать через функцию MouseEvent.getLocationOnScreen().
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

kamre писал(а):
06.08.2009 19:11
zshgm писал(а):
06.08.2009 17:40
Глобально а не только в своем приложении

Если имееются ввиду координаты относительно левого верхнего угла экрана, то это можно сделать через функцию MouseEvent.getLocationOnScreen().


Чет не работает, подскажите что не так..

import java.awt.event.MouseEvent;
public class main2 {
public static void main(String[] args) {
System.out.println(MouseEvent.getLocationOnScreen().x);
}
}

выдает оошибку:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot make a static reference to the non-static method getLocationOnScreen() from the type MouseEvent
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Warlornhor
Сообщения: 428
ОС: openSUSE 12.3

Re: Java получить координаты курсора мыши

Сообщение Warlornhor »

Вольный перевод: "Ты что делаешь?! Хочешь чтобы я так сразу без ссылки на объект тебе этот метод вызвал? Он не статический!!! Сначала нужен instance объекта класса java.awt.event.MouseEvent, а потом уж у него и вызывай этот метод." Как то так.
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

Warlornhor писал(а):
08.08.2009 10:02
Вольный перевод: "Ты что делаешь?! Хочешь чтобы я так сразу без ссылки на объект тебе этот метод вызвал? Он не статический!!! Сначала нужен instance объекта класса java.awt.event.MouseEvent, а потом уж у него и вызывай этот метод." Как то так.


public class main2 {
public static void main(String[] args) {
MouseEvent mevent = null;
System.out.println(mevent.getLocationOnScreen().getX());
}
}

а как его правильно инициализировать??
приведите пжлста примерчик..
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Warlornhor
Сообщения: 428
ОС: openSUSE 12.3

Re: Java получить координаты курсора мыши

Сообщение Warlornhor »

Если честно, никогда этого не делал, да и не очень я в SWING силен. Но я думаю что эта ссылка сможет Вам помочь.

PS
Вы бы хоть немного о языке почитали, о том как можно писать как нельзя, про статические методы и что такое null. Здесь очень много разных примеров с описанием.
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

на другом форуме подсказали что можно так:

Point location = MouseInfo.getPointerInfo().getLocation();
double x = location.getX();
double y = location.getY();

System.out.println("x = " + x);
System.out.println("y = " + y);

Работает как нужно в java 5, но нужно тоже самое в java 4 :( Обновить до новой версии не получится, так как комп на отором нужно выполнить - удаленный и не имеет доступ к репазиториям. Есть ли какие-нибудь аналоги для старой java ? или раньше нельзя было получить координаты мыши :)
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

zshgm писал(а):
08.08.2009 16:31
Работает как нужно в java 5, но нужно тоже самое в java 4 :( Обновить до новой версии не получится, так как комп на отором нужно выполнить - удаленный и не имеет доступ к репазиториям. Есть ли какие-нибудь аналоги для старой java ? или раньше нельзя было получить координаты мыши :)

Может быть через этот метод получится: SwingUtilities.convertPointToScreen.
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

kamre писал(а):
08.08.2009 21:09
zshgm писал(а):
08.08.2009 16:31
Работает как нужно в java 5, но нужно тоже самое в java 4 :( Обновить до новой версии не получится, так как комп на отором нужно выполнить - удаленный и не имеет доступ к репазиториям. Есть ли какие-нибудь аналоги для старой java ? или раньше нельзя было получить координаты мыши :)

Может быть через этот метод получится: SwingUtilities.convertPointToScreen.


convertPointToScreen
public static void convertPointToScreen(Point p, Component c)
Convert a point from a component's coordinate system to screen coordinates.
Parameters:
p - a Point object (converted to the new coordinate system)
c - a Component object

- а что в качестве компонента указывать?
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

zshgm писал(а):
09.08.2009 09:05
- а что в качестве компонента указывать?


Создаем компонент, добавляем MouseMotionListener. При движении мышки внутри компонента получим событие с координатами внутри компонента. А с помощью вышеуказанной функции можно эти координаты перевести в экранные.

Примерно вот так:

Код: Выделить всё

import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class MouseScreenCoords extends JFrame {
    public MouseScreenCoords() {
        super("Mouse Screen Coordinates");
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                Point p = new Point(e.getPoint());
                System.out.println("Component coords: x = " + p.x + ", y = " + p.y);
                SwingUtilities.convertPointToScreen(p, MouseScreenCoords.this);
                System.out.println("Screen coords: x = " + p.x + ", y = " + p.y);
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MouseScreenCoords();
            }
        });
    }
}
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

kamre писал(а):
09.08.2009 15:55
zshgm писал(а):
09.08.2009 09:05
- а что в качестве компонента указывать?


Создаем компонент, добавляем MouseMotionListener. При движении мышки внутри компонента получим событие с координатами внутри компонента. А с помощью вышеуказанной функции можно эти координаты перевести в экранные.

Примерно вот так:

Код: Выделить всё

import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class MouseScreenCoords extends JFrame {
    public MouseScreenCoords() {
        super("Mouse Screen Coordinates");
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                Point p = new Point(e.getPoint());
                System.out.println("Component coords: x = " + p.x + ", y = " + p.y);
                SwingUtilities.convertPointToScreen(p, MouseScreenCoords.this);
                System.out.println("Screen coords: x = " + p.x + ", y = " + p.y);
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MouseScreenCoords();
            }
        });
    }
}





получаю ексепшн :(
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method run() of type new Runnable(){} must override a superclass method
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

zshgm писал(а):
09.08.2009 20:30
получаю ексепшн :(
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method run() of type new Runnable(){} must override a superclass method


Странно, у меня все работает. Вот такая версия java установлена:
java version "1.6.0_14"
Java™ SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot™ Client VM (build 14.0-b16, mixed mode, sharing)


Может быть код компилируется под одну версию Java, а запускается на другой?
Спасибо сказали:
Warlornhor
Сообщения: 428
ОС: openSUSE 12.3

Re: Java получить координаты курсора мыши

Сообщение Warlornhor »

Ошибка говорит о том что Вы не переписали метод run() у интерфейса Runnable. Но все вроде корректно, однако, если мне не изменяет память, то 4 Java не умела еще работать с аннотациями, может имеет смысл их убрать?
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

Warlornhor писал(а):
09.08.2009 23:29
Но все вроде корректно, однако, если мне не изменяет память, то 4 Java не умела еще работать с аннотациями, может имеет смысл их убрать?


С аннотациями проблема была бы еще при компиляции. А приведен был exception в runtime. Мне кажется, что сборка делается не под Java 1.4, а запускается под ней как раз. Хотя я таких exception у себя пока не встречал, так могу и ошибаться...

P.S. в любом случае аннотации нужно убирать, чтобы скомпилировать под 1.4
Спасибо сказали:
Warlornhor
Сообщения: 428
ОС: openSUSE 12.3

Re: Java получить координаты курсора мыши

Сообщение Warlornhor »

kamre писал(а):
10.08.2009 00:38
Warlornhor писал(а):
09.08.2009 23:29
Но все вроде корректно, однако, если мне не изменяет память, то 4 Java не умела еще работать с аннотациями, может имеет смысл их убрать?


С аннотациями проблема была бы еще при компиляции. А приведен был exception в runtime. Мне кажется, что сборка делается не под Java 1.4, а запускается под ней как раз. Хотя я таких exception у себя пока не встречал, так могу и ошибаться...

C Runnable тоже при компиляции :). И приведен был Error, если мне не изменяет память, то он НЕ Runtime. Ключевая фраза:
Unresolved compilation problem
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: Java получить координаты курсора мыши

Сообщение kamre »

Warlornhor писал(а):
10.08.2009 08:45
C Runnable тоже при компиляции :). И приведен был Error, если мне не изменяет память, то он НЕ Runtime. Ключевая фраза:
Unresolved compilation problem



Ключевая фраза:
Exception in thread "main" java.lang.Error

а это значит, что программу уже скомпилировали и запустили. Компилятор же ошибки еще на этапе компиляции показывает.

Хотя может быть и так, что компилятор вместо ошибки компиляции сгенерировал код для бросания этого исключения. Вроде бы в Eclipse так делается, когда запускается программа не смотря на ошибки компиляции.
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: Java получить координаты курсора мыши

Сообщение zshgm »

Всем спасибо! получилось на Java, правда реализовать пришлось еще и на сях : /
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Alehandra354
Сообщения: 1

Re: Java получить координаты курсора мыши

Сообщение Alehandra354 »

kamre писал(а):
09.08.2009 15:55
zshgm писал(а):
09.08.2009 09:05
- а что в качестве компонента указывать?


Создаем компонент, добавляем MouseMotionListener. При движении мышки внутри компонента получим событие с координатами внутри компонента. А с помощью вышеуказанной функции можно эти координаты перевести в экранные.

Примерно вот так:

Код: Выделить всё

import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class MouseScreenCoords extends JFrame {
    public MouseScreenCoords() {
        super("Mouse Screen Coordinates");
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                Point p = new Point(e.getPoint());
                System.out.println("Component coords: x = " + p.x + ", y = " + p.y);
                SwingUtilities.convertPointToScreen(p, MouseScreenCoords.this);
                System.out.println("Screen coords: x = " + p.x + ", y = " + p.y);
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MouseScreenCoords();
            }
        });
    }
}


можешь помочь это перевести под android
Спасибо сказали: