and wow that was a pathetically protracted time period for my response. Apologies.
public class DMToolGame extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 3711700171154644204L;
private Screen mCurrentScreen;
private MouseListener mListener;
private KeyListener mKeyListener;
private double mCurrentFrame, mLastFrame;
private Timer mTimer;
public DMToolGame(int width, int height){
//Screen setup
setFocusable(true);
setDoubleBuffered(true);
init();
}
public void init(){
mCurrentScreen = new TitleScreen();
mListener = new MouseListener(this);
mLastFrame = 0;
mCurrentFrame = 0;
mTimer = new Timer(5, this);
mTimer.start();
addMouseListener(mListener);
addKeyListener(mKeyListener);
}
This class does the painting to the canvas and is itself the window. However, all of the objects that you can interact with are stored on various Screens, a character select screen, a battle Screen etc. This class just represents the window, stores which Screen we are currently on and tells it to draw itself.
Currently I have one single MouseListener called mListener as explained
public class MouseListener extends MouseAdapter{
private DMToolGame mTool;
private Screen mCurrentScreen;
public MouseListener(DMToolGame tool){
mTool = tool;
mCurrentScreen = mTool.getCurrentScreen();
}
public void mousePressed(MouseEvent e){
Point p = e.getPoint();
ScreenItem intersectObject = mCurrentScreen.objectIntersects(p);
if(intersectObject != null){
if(intersectObject.getClass() == Button.class){
if(intersectObject.getName().equals("Battle")){
mTool.setCurrentScreen(new BattleScreen());
mCurrentScreen = mTool.getCurrentScreen();
}
else if(intersectObject.getName().equals("Load Campaign")){
mTool.setCurrentScreen(new CampaignScreen());
mCurrentScreen = mTool.getCurrentScreen();
}
else if(intersectObject.getName().equals("Next Turn")){
((BattleScreen)mCurrentScreen).NextTurn();
}
else if(intersectObject.getName().equals("Add Character")){
((BattleScreen)mCurrentScreen).AddCharacterDialog();
}
}
}
}
}
Since I’m making this listener generic and do all the work for the various screens, I’m requiring it to do various abstract hurdles to figure out what to do.
I’ve been trying to make Screen extend JPanel, and then add custom MouseListeners to each of the subScreens *BattleScreen, CampaignScreen etc, but they don’t seem to trigger…
public class TitleScreen extends Screen{
/**
*
*/
private static final long serialVersionUID = 4838620713526543945L;
private Image mBackground;
private Button mLoadButton;
public TitleScreen(){
mBackground = managers.ImageManager.getInstance().getImage("TitleScreen.png");
mLoadButton = new Button("Load Campaign", 100, 100);
addMouseListener(new MouseListener());
}
public void draw(Graphics2D g2d, DMToolGame window) {
g2d.drawImage(mBackground, 0, 0, window);
mLoadButton.draw(g2d, window);
}
public ScreenItem objectIntersects(Point p) {
if(mLoadButton.contains(p)){
return mLoadButton;
}
return null;
}
public class MouseListener extends MouseAdapter{
public MouseListener(){
System.out.println("Mcreated!");
}
@Override
public void mouseClicked(MouseEvent e){
System.out.println("Mouse was clicked");
}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
}
}
It should be noted that I’m not using JButtons or any other Java Objects except for the Canvas so I cant just add listeners to the buttons in question.