So I'm creating a game in Java in which the user clicks on an image that's different from the rest. I've already got the images for the level created, but I just want to make it so that if the user clicks on a specific spot on the image, the game will react in moving on to the next image. (All of the images are placed in an array already.) The game is set up so that it opens with the first image already. Here's my code:
package Final;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.*;
import javax.swing.JFrame;
public class drawPictures extends JFrame implements MouseListener { //it implements this because I want the user to click stuff
//Now I need to declare the images that serve as my levels variables ahead of time.
protected static Image levelOne;
protected static Image levelTwo;
protected static Image levelThree;
protected static Image levelFour;
protected static Image levelFive;
protected Graphics g = this.getGraphics();
//Done declaring.
//Now to load the images
private static Image loadImage(String imgFileName) {
Image img = null;
try {
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage(imgFileName);
} catch (Exception e) {
System.err.println("Image not found: "+ imgFileName);
}
return img;
} //done loading the images
static Image [] pictureArray = new Image[5]; { //This is the array that will store all of the images
//otherwise known as the "levels"
pictureArray[0] = levelOne; //each "slot" in the array is taken up by one
//of the images that serves as the level
pictureArray[1] = levelTwo;
pictureArray[2] = levelThree;
pictureArray[3] = levelFour;
pictureArray[4] = levelFive;
}
/*
* Now that the actual array that stores the levels has been created
* I need to create a method that "paints" the level,
* and moves on to the next one when the user clicks on something.
*
* I also need to create a box with dimensions 151x159
* overtop of the happy tomato in the first level.
* That will be the
*/
public drawPictures() {
super("One of These Things Doesn't Belong...");
setSize(1500, 750);
setDefaultCloseOperation(EXIT_ON_CLOSE); // Creates the "x" box.
setVisible(true); // Makes the window visible.
start();
}
public void paint(Graphics g) {
g.drawImage(pictureArray[0], 100, 100, this);
}
public static void start()
/*
* this entire method exists for the sole purpose of loading the images
* that I placed in the variables that I declared above.
* WHY IS PROGRAMMING SO DARN TEDIOUS???
*/
{
levelOne = loadImage("Level 1.jpg");
levelTwo = loadImage("Level 2.jpg");
levelThree = loadImage("Level 3.jpg");
levelFour = loadImage("Level 4.jpg");
levelFive = loadImage("Level 5.jpg");
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
new drawPictures();
}
}
You never add a mouse listener to the frame.
Having said that...
JFrame
paint
methods)super.paintXxx
(unless you have an incredibly good reason to do otherwise) as the paint methods a rather complex and perform a lot of very import workImageIO
. It has support for a larger number of images.In your mouse clicked event, you need to determine the current image that is begin displayed. You need to determine is boundaries and determine if the mouse was clicked in it.
UPDATED with example
This is a crude example. Basically it uses a custom
JPanel
that paints the image. To this I add aMouseListener
.The main program uses a folder and scrolls through, displaying each (valid) image on the image panel as you click.
Mouse clicks will only occur within the context of the image panel itself.
Why do you want an invisible object above your image?
Anyway, to answer your question, create a JPanel located just as your image.
JPanel yourPanel = new JPanel()
Set it's location same as your image.Create a MouseListener on your JPanel.