Итак, я пытаюсь выяснить, как я могу создать пользовательский MouseListener для всех моих кнопок, которые не требуют перечисления ни одного из них в обработчике, потому что у меня их много. Вот код, который у меня есть в моем Слушателе на данный момент:Проблемы с пользовательской кнопкой Java (не JButton)
package com.dinobuilding.handler;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import com.BLANK.BLANKScreen;
import com.BLANK.BLANKWindow;
import com.BLANK.menufeature.Button;
public class ButtonHandler implements MouseListener {
public BLANKWindow dbw;
public BLANK Screen dbs;
static Button button = new Button();
public int buttonX = button.x;
public int buttonY = button.y;
public int buttonSizeX = button.xSize;
public int buttonSizeY = button.ySize;
public ButtonHandler(BLANKWindow dbw, BLANKScreen dbs) {
this.dbw = dbw;
this.dbs = dbs;
}
public static void setButton(Button b) {
button = b;
}
public int mouseEventX;
public int mouseEventY;
Graphics g;
public void mouseClicked(MouseEvent e) {
mouseEventX = e.getLocationOnScreen().x;
mouseEventY = e.getLocationOnScreen().y;
if(mouseEventX <= buttonX && mouseEventX >= buttonX + buttonSizeX) {
if(mouseEventY <= buttonY && mouseEventY >= buttonY + buttonSizeY) {
button.onClicked(dbs, dbw, g);
}
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
А вот код в первой кнопке, которую я пытаюсь выполнить:
package com.BLANK.menus;
import java.awt.Color;
import java.awt.Graphics;
import com.BLANK.BLANKScreen;
import com.BLANK.BLANKWindow;
import com.BLANK.handler.ButtonHandler;
import com.BLANK.menufeature.Button;
public class MainMenuPlayButton extends Button {
public static int x;
public static int y;
public static int xSize;
public static int ySize;
public static String s;
public static Graphics g;
public MainMenuPlayButton(int x, int y, int xSize, int ySize, String s, Graphics g) {
super(x, y, xSize, ySize, s, g);
this.x = x;
this.y = y;
this.xSize = xSize;
this.ySize = ySize;
this.s = s;
this.g = g;
setColor(new Color(0, 226, 26));
draw();
}
public MainMenuPlayButton() {
}
public static void draw() {
drawButton(x, y, xSize, ySize, g, s);
ButtonHandler.setButton(new MainMenuPlayButton());
}
public void onClicked(BLANKScreen dbs, BLANKWindow dbw, Graphics g) {
setColor(new Color(216, 0, 0));
}
Я думаю, что моя основная проблема заключается в том, что код в ButtonHandler вызывается перед кодом в Баттона и поэтому ButtonHandler использует сам класс Button, а не класс MainMenuPlayButton. Если вам нужен класс Button, просто скажите мне, однако я не могу себе представить, почему. Заранее спасибо!
Редактировать
Ok, после отладки некоторых, я обнаружил, что я на самом деле имеют противоположную проблему. Кнопка никогда не будет нажата. Метод getSource()
мог бы работать, однако я действительно не знаю, как его использовать, и я не думаю, что я мог бы использовать это без жесткого кодирования каждой отдельной кнопки, чего я действительно не хочу делать.
EDIT 1: Как вы думаете, может быть, я мог бы использовать MouseEvent-х getX
или getXOnScreen
? Кстати, я зарегистрировал ButtonHandler с помощью frame.addMouseListener на моей JFrame, так что ...
EDIT 2: Казалось бы, что метод getX
не работает. Если бы вы могли мне помочь, я бы очень признателен этому.
Каждый конкретный класс кнопки будет иметь свой собственный объект Handler, добавленный к нему. Например, если это была программа калькулятора, я бы сделал один обработчик для числовых кнопок, а другой для кнопок математических операций и, возможно, третий для функций графического интерфейса, например для выхода. Кроме того, вы можете получить исходный объект для нажатия мыши с помощью метода 'getSource()' MouseEvent. –
@HovercraftFullOfEels У меня есть класс супер Button, который я хочу, чтобы все кнопки использовались, и ButtonHandler использует это. Кроме того, сама мышь не является моей проблемой, моя проблема в том, что я не могу заставить ButtonHandler изменять метод Button onClicked, или, более конкретно, я не могу заставить метод setButton работать. – 2014-09-14 18:22:59
Возможно, вам потребуется выполнить дополнительную отладку, чтобы увидеть, что именно и где ее не удается. –