Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Курсор мыши


Автор: TrivialCore 28.12.2004, 17:18
Как заставить окно
1. Сделать курсор мыши невидимым
2. Устанавливать положение курсора (скажем, в середине окна)

Искал в инете, не нашел =(
Добавлено @ 17:19
ЗЫ как в Quake, етс.

Автор: Domestic Cat 28.12.2004, 18:51
1. Как спрятать курсор.
Код

Cursor invisibleCursor = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolki().getImage(""), new Point(0, 0),
"invisible");
myWindow.setCursor(invisibleCursor);


С квейком попозже чуть-чуть.

Автор: TrivialCore 28.12.2004, 18:55
Ну наконец проснулся! Здорово, теперь надо его зацепить в середине и при движении измерять величину изменения и обратно сажать в середину =)
С последним п. проблемы.

Автор: Domestic Cat 28.12.2004, 19:02
2. Рецентеринг
Вот кусок кода, который это делает:
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;

public class QuakeLook
   implements MouseMotionListener
   
{
   private Robot robot;
   private Point mouseLocation;
   private Point centerLocation;
   private boolean isRecentering;

   public void init()
   {
       mouseLocation = new Point();
       centerLocation = new Point();
       imageLocation = new Point();
       isRecentering = false;

       try {
           robot = new Robot();
           recenterMouse();
           mouseLocation.x = centerLocation.x;
           mouseLocation.y = centerLocation.y;
       }
       catch (AWTException ex) {
           System.out.println("Couldn't create Robot!");
       }
       Window window = //...
       window.addMouseMotionListener(this);
       Cursor invisibleCursor = Toolkit.getDefaultToolkit().createCustomCursor(
       Toolkit.getDefaultToolkit().getImage(""), new Point(0,0), "invisible");
       window.setCursor(invisibleCursor);
   }

   private synchronized void recenterMouse() {
       Window window = screen.getFullScreenWindow();
       if (robot != null && window.isShowing()) {
           centerLocation.x = window.getWidth() / 2;
           centerLocation.y = window.getHeight() / 2;
           SwingUtilities.convertPointToScreen(centerLocation,
               window);
           isRecentering = true;
           robot.mouseMove(centerLocation.x, centerLocation.y);
       }
   }

   public void mouseDragged(MouseEvent e) {
       mouseMoved(e);
   }

   public synchronized void mouseMoved(MouseEvent e) {
       if (isRecentering &&
           centerLocation.x == e.getX() &&
           centerLocation.y == e.getY())
       {
           isRecentering = false;
       }
       else {
           int dx = e.getX() - mouseLocation.x;
           int dy = e.getY() - mouseLocation.y;
           imageLocation.x += dx;
           imageLocation.y += dy;
           recenterMouse();
       }
       mouseLocation.x = e.getX();
       mouseLocation.y = e.getY();

   }

}

Автор: TrivialCore 28.12.2004, 19:28
Это ты сейчас настрочил? smile Держи +

Автор: Domestic Cat 28.12.2004, 19:29
Не, оно у меня было уже smile Я сейчас болею, неработоспособен. А за + сенкс smile

Автор: sonic 5.1.2005, 00:51
А как на счет того, чтобы сделать невидимый курсор, или свой (custom) курсор под AWT (java1.1, чтоб под 98 со стандартной мелкомягковской ява машиной шло)?

Автор: Domestic Cat 5.1.2005, 02:38
А никак, видимо. К тому же, зачем, кто сейчас на 1.1 что-то делает?
Добавлено @ 02:41
М
 
sonic, мы всегда рады новым людям на форуме. Особенно если они зарегистрированы :)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)