gpt4 book ai didi

java - 将鼠标事件从 JList 转发到列表中的项目

转载 作者:行者123 更新时间:2023-11-29 05:58:51 25 4
gpt4 key购买 nike

目前,我有一个带有自定义 CellRendererJlist,如下所示。我附加了一个自定义 MouseListener 以捕获悬停事件,然后是双击事件;但是当我以这种方式添加事件时,事件并没有被触发。 20 分钟后,我发现这是因为 JList 阻止了事件到达各个列表项。有什么方法可以强制 JList 将鼠标事件转发给它的子元素,或者有更好的方法来做到这一点。

我的 CellRenderer:

public class FriendRenderer extends DefaultListCellRenderer {

private static final long serialVersionUID = 1L;

public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean hasFocus) {

Friend friend = (Friend)value;

JLabel label = new JLabel(friend.getName());

JPanel mainOuterPanel = new JPanel();
mainOuterPanel.setLayout(new BorderLayout());

/* Adding components to mainOuterPanel... */

/* Here is where I add the custom MouseListener */
mainOuterPanel.addMouseListener(new ListItemMouseListener());

return(mainOuterPanel);
}

}

我的鼠标监听器:

public class ListItemMouseListener implements MouseListener{

@Override
public void mouseClicked(MouseEvent e) {}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseReleased(MouseEvent e) {}

@Override
public void mouseEntered(MouseEvent e) {
Component source = e.getComponent();
source.setBackground(new Color(102, 99, 86));
System.out.println("Mouse entered on " + source.toString());
}

@Override
public void mouseExited(MouseEvent e) {
Component source = e.getComponent();
source.setBackground(null);
System.out.println("Mouse Exited on " + source.toString());
}
}

我在 JFrame 中构建 JList 的位置:

private JList getFriendsList(){
friendsList = new JList(getFriendsListModel()); //TODO Actually fill with data
friendsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
friendsList.setLayoutOrientation( JList.VERTICAL );
friendsList.addListSelectionListener(new FriendsListSelectionListener());
friendsList.setCellRenderer(new FriendRenderer());
return friendsList;
}

提前致谢!

最佳答案

将监听器添加到列表中,并使用列表方法将点转换为行。

添加到渲染器后它不起作用的原因是渲染器实际上仅用于 ..rendering。它就像一个"template",用于在项目出现在屏幕上之前绘制列表项(以及所有其他可见列表项)。


..access the cells .. in order to change the background..

配置ListCellRenderer来处理这个问题。

关于java - 将鼠标事件从 JList 转发到列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959451/

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