Can someone tell me how to change this template to get mouseX, mouseY, left mousebutton (as variables)?
(I started learning Java like 4 days ago and I got a headache when I saw how many possible methods to obtain mouse position there are :D)
Can someone tell me how to change this template to get mouseX, mouseY, left mousebutton (as variables)?
(I started learning Java like 4 days ago and I got a headache when I saw how many possible methods to obtain mouse position there are :D)
Well, it kind of depends on what you want exactly, that’s why there are so many methods
Anyway, you should probably check out these two tutorials:
http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html
I need the simpliest one, just filling the ??? parts.
public boolean handleEvent(Event e) {
switch (e.id) {
case Event.KEY_PRESS:
case Event.KEY_ACTION:
// key pressed
break;
case Event.KEY_RELEASE:
// key released
break;
case Event.MOUSE_DOWN:
// mouse button pressed
mouseButtonState=???;
break;
case Event.MOUSE_UP:
// mouse button released
mouseButtonState=???;
break;
case Event.MOUSE_MOVE:
mouseX=???; mouseY=???;
break;
case Event.MOUSE_DRAG:
break;
}
return false;
}
The event that is passed to the handler has all the information, so in case of the movement:
...
case Event.MOUSE_MOVE:
mouseX=e.getX();
mouseY=e.getY();
break;
...
And in the case of the mouse_down and mouse_up, e.getButton() returns an int corresponding to the mousebutton the event applies to, so:
...
case Event.MOUSE_DOWN:
if (e.getButton() == MouseEvent.BUTTON1) {
mouseButtonState="down";
}
break;
...
and similar for Event.MOUSE_UP
“The method getX() is undefined for the type Event”
Full source:
import java.applet.Applet;
import java.awt.Component;
import java.awt.Event;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
public class G extends Applet implements Runnable {
public void start() {
new Thread(this).start();
}
int mouseX=0;
int mouseY=0;
public void run() {
setSize(800, 600); // For AppletViewer, remove later.
// Set up the graphics stuff, double-buffering.
BufferedImage screen = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
Graphics g = screen.getGraphics();
Graphics appletGraphics = getGraphics();
// Some variables to use for the fps.
int tick = 0, fps = 0, acc = 0;
long lastTime = System.nanoTime();
// Game loop.
while (true) {
long now = System.nanoTime();
acc += now - lastTime;
tick++;
if (acc >= 1000000000L) {
acc -= 1000000000L;
fps = tick;
tick = 0;
}
// Update
// TODO add some update logic here.
lastTime = now;
// Render
g.setColor(Color.black);
g.fillRect(0, 0, 800, 600);
g.setColor(Color.white);
g.drawString("FPS " + String.valueOf(fps), 20, 30);
g.drawString("Mouse ("+mouseX+','+mouseY+')', 20,60);
// Draw the entire results on the screen.
appletGraphics.drawImage(screen, 0, 0, null);
try {
Thread.sleep(10);
} catch (Exception e) { /* best practice */ };
if (!isActive()) {
return;
}
}
}
public boolean handleEvent(Event e) {
switch (e.id) {
case Event.KEY_PRESS:
case Event.KEY_ACTION:
// key pressed
break;
case Event.KEY_RELEASE:
// key released
break;
case Event.MOUSE_DOWN:
// mouse button pressed
break;
case Event.MOUSE_UP:
// mouse button released
break;
case Event.MOUSE_MOVE:
mouseX=e.getX();
mouseY=e.getY();
break;
case Event.MOUSE_DRAG:
break;
}
return false;
}
}
I’m sorry, apparently the x and y values are public. You don’t need to use getters but you can use this:
mouseX=e.x;
this is all deprecated code by the way. In case of the 4k competition you can still use this (because it requires less code this way) but in other applications I recommend using mouseListener and mouseMotionListener.
EDIT:
The code I gave for the button doesn’t work with the old events either. In order to differentiate between mouse buttons you need to check e.modifiers.
case Event.MOUSE_DOWN:
if (e.modifiers == 0) //left button
if (e.modifiers == Event.ALT_MASK // middle button
if (e.modifiers == Event.META_MASK // right button
Unfortunately, this method counts pressing the left button while holding the alt key as pressing the middle mouse button. If that’s a problem, you’ll need to use the newer listeners.
Works, thanks (maybe by some miracle I will finish it before the deadline :D)