gpt4 book ai didi

java - 将 MouseAdapter 列表的所有元素添加到 JComponent

转载 作者:行者123 更新时间:2023-12-01 12:45:30 27 4
gpt4 key购买 nike

我有一个 JLabel 数组,还有一个包含 MouseAdapter 的列表列表。这个想法是每个 JLabel 都有一个 MouseAdapter 列表。我想迭代这些列表并将 MouseAdapter 添加到每个 JLabel

JLabel[] labels;
ArrayList<ArrayList<MouseAdapter>> labelBehaviors;

但是,您无法将 MouseAdapter 添加到 JComponent:它们必须转换为 MouseListenerMouseMotionListener等,然后添加相应的方法。除了确定 MouseAdapter 是否是 MouseListenerMouseMotionListener 等的实例,然后进行转换之外,还有什么方法可以做到这一点它并用正确的方法添加它?

我正在尝试这样做:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com