我有一个 JLabel
数组,还有一个包含 MouseAdapter
的列表列表。这个想法是每个 JLabel
都有一个 MouseAdapter
列表。我想迭代这些列表并将 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
的类型签名?
最佳答案
MouseAdapter
实现所有三个接口(interface)。如果这些方法没有被重写,它们将不会执行任何操作。简而言之,您可以跳过这些检查,因为由于声明,所有这些检查都会返回 true
public abstract class MouseAdapter implements MouseListener, MouseMotionListener, MouseWheelListener
简化的循环是
for ( MouseAdapter behavior : labelBehaviors.get( i ) ) {
label.addMouseListener( behavior );
label.addMouseMotionListener( behavior );
label.addMouseWheelListener( behavior );
}
关于java - 将 MouseAdapter 列表的所有元素添加到 JComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24741554/