我正在尝试使用 swing 开发一个 GUI 界面,其中组件可以通过侦听器与其他组件进行通信。我遇到的问题是:-
方法
- 实现监听器
- 使用匿名方法添加具有侦听器方法的侦听器
- 从实现监听器的类中添加监听器
问题
- 在处理大量对象时,实现侦听器会导致试图对对象进行操作会造成混乱
- 与 1 相同,但构造函数需要匿名方法的 final
- 不能在不诉诸静态引用的情况下对侦听类之外的对象进行操作。
这真的很令人沮丧,因为我怎样才能让 MouseListenerClass 在作为单独 JFrame 类的一部分的 JPanel 上绘制而不将 JPanel 传递给 mouseListenerClass 以对其进行操作。
我似乎可以使用的唯一方法是创建一个名为 MouseState 的 Enum,当触发鼠标事件 MousePressed 时,它将静态 Enum mouseStatus 设置为按下,然后 JPanel paintComponent 方法检查 Enum mouseStatus 并在按下时进行绘制。
这似乎是错误的方式。
还有其他方法吗?
更新以反映 Cyrille 的评论:-
谢谢@Cyrille,我不得不使用强制转换来修改您的代码,但前提仍然有效。' public void mousePressed(MouseEvent e) {
PaintPanel p=(PaintPanel) getTargetPanel();
p.setMousePressed(true);
p.setMouseCoords(e.getPoint());
}
public void mouseReleased(MouseEvent e) {
PaintPanel p=(PaintPanel) getTargetPanel();
p.setMousePressed(false);
}
public JPanel getTargetPanel() {
return targetPanel;
}'