Мне интересно, есть ли эффективный способ обработки щелчков мыши в пределах диапазона координат, а не с кучей if-утверждений. Это заставляет меня думать о том, как использовать Listener для его обработки, однако можно ли даже назначить Listener произвольному объекту?Эффективное управление щелчками мыши
ответ
Если вы говорите о прослушивании действий мыши на JComponent, как JButton, вы можете добавить MouseListener в JComponent.
Если вы говорите об объектах, созданных вами, которые отображаются в виде изображения на панели, вы можете добавить MouseListener на панель, содержащую ваши объекты. На каждом щелчке мыши, итерации через объекты на панели и проверить, содержит ли объект курсор мыши.
class DisplayPanel extends JPanel{
//Your constructor and other members..
public DisplayPanel(){
addMouseListener(new MouseAdapter(){
public void mouseClicked (MouseEvent e){
for(MyObjects : obj)
if(obj.contains(e.getX(), e.getY()))
clickedObj = obj;
}
});
}
}
ли вы имеете в виду есть произвольный класс расширения JComponent? Что, если он уже расширяет другой класс?
Альтернативой было бы рассмотреть вопрос о создании индивидуального JComponent. Однако, если ваш объект уже распространяется на другой класс. Вы можете рассмотреть состав по наследованию:
class ArbritaryComponent extends JComponent{
private ArbritaryObject obj;
}
class ArbritaryObject extends SomeClass{
private Image image;
}
Затем добавьте слушателя в свой индивидуальный компонент. Чтобы получить краткое представление о настройке JComponent: Extending JComponent
Я стараюсь избегать итерации, если это возможно, но да, это изображение, которое появляется на JFrame, но это объект, созданный мной. –
@JacobG. Сколько у вас объектов? – user3437460
Недостаточно того, что при итерации по ним будет замедляться программа, но мне любопытно, есть ли другой способ ее обработки. –