我有一个JLabel
的数组,我有一个包含MouseAdapter
的列表。我们的想法是每个MouseAdapter
都有一个JLabel
列表。我想迭代这些列表,并将MouseAdapter
添加到每个JLabel
。
JLabel[] labels;
ArrayList<ArrayList<MouseAdapter>> labelBehaviors;
但是,您无法将MouseAdapter
添加到JComponent
:必须将其转换为MouseListener
,MouseMotionListener
等,然后添加相应的MouseAdapter
方法。有没有办法可以做到这一点,除了确定MouseListener
是MouseMotionListener
,for ( int i = 0; i < LABEL_COUNT; i++ ) {
JLabel label = labels[i];
if ( label != null ) {
// Add associated behaviors to the label.
for ( MouseAdapter behavior : labelBehaviors.get( i ) ) {
// addMouseEventListener() doesn't exist...
label.addMouseEventListener( behavior );
}
}
}
等的实例,然后将其投射并使用正确的方法添加它?
我正在尝试这样做:
for (int i = 0; i < LABEL_COUNT; i++ ) {
JLabel label = labels[i];
if ( label != null ) {
// Add associated behaviors to the label.
for ( MouseAdapter behavior : labelBehaviors.get( i ) ) {
// Check type of behavior.
if ( behavior instanceof MouseListener ) {
label.addMouseListener( (MouseListener) behavior );
} else if ( behavior instanceof MouseMotionListener ) {
label.addMouseMotionListener( (MouseMotionListener) behavior );
} else if ( behavior instanceof MouseWheelListener ) {
label.addMouseWheelListener( (MouseWheelListener) behavior );
}
}
}
}
除非没有更简单的方法,否则我不想做这样的事情:
labelBehaviors
是否有更简单的方法,可能涉及{{1}}的类型签名?
答案 0 :(得分:1)
MouseAdapter
实现所有三个接口。如果方法没有被覆盖,它们将什么也不做。简而言之,您可以跳过这些检查,因为所有这些检查都会因为声明
public abstract class MouseAdapter implements MouseListener, MouseMotionListener, MouseWheelListener
简化循环
for ( MouseAdapter behavior : labelBehaviors.get( i ) ) {
label.addMouseListener( behavior );
label.addMouseMotionListener( behavior );
label.addMouseWheelListener( behavior );
}