Во-первых, я пришел на Java в качестве программиста веб-сайта.В JavaScript все, что вам нужно сделать, чтобы добавить событие mousemove, mouseover или click, - это вызвать функцию addEventListener.Из моего ограниченного опыта работы с Java вы не можете просто реализовать интерфейс MouseListener из любого объекта.
По сути, у меня есть JPanel, который рисует некоторые фигуры (объект CustomShape с помощью метода рисования)которые имеют значения х / у / ширина / высота.Я хочу добавить некоторый тип слушателя мыши к объекту фигуры, чтобы я мог запускать события перемещения / вращения / щелчка для фигуры.Простая реализация интерфейса MouseListener для объекта CustomShape не работает (по очевидным причинам.Я посмотрел, как спроектировать пользовательские прослушиватели событий, но кажется, что создание пользовательского прослушивателя мыши не представляется возможным.
В конце концов я прибег к добавлению прослушивателя мыши к JPanel, а затем перебираювсе объекты формы.Если к объекту фигуры был прикреплен «слушатель», и координаты мыши подтвердили, что произошло событие мыши, это вызвало метод.Изначально все было хорошо, но по мере того, как приложение становилось все более развитым, оно становилось действительно очень грязным.Кроме того, я бы никогда не смог скопировать объекты / интерфейсы формы в другое приложение, не скопировав кучу кода.
В качестве простой иллюстрации: (реальный код довольно большой)
Interface CustomShape{
int width, height, x, y;
void paint(Graphics g);
}
public class StarShape implements CustomShape{
int width, height, x, y;
public StarShape(){
width = 100;
height = 100;
x = 50;
y = 50;
}
void paint(Graphics g){
g.setColor(Color.black);
g.draw(new Rectangle(x,y,width,height));
}
}
public class Main extends JPanel{
StarShape check = new StarShape();
public Main(){ }
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
check.paint(g);
}
}
Итак, мне было интересно, существует ли чистый способ реализации какого-либо типа слушателя мыши для «рисованной» формы.