JList 元素上的双击事件
Posted
技术标签:
【中文标题】JList 元素上的双击事件【英文标题】:Double-click event on JList element 【发布时间】:2011-05-19 16:24:46 【问题描述】:我有一个JList
和一个DefaultListModel
。
如何使JList
中的项目对双击事件做出反应?
【问题讨论】:
【参考方案1】:String[] items = "A", "B", "C", "D";
JList list = new JList(items);
list.addMouseListener(new MouseAdapter()
public void mouseClicked(MouseEvent evt)
JList list = (JList)evt.getSource();
if (evt.getClickCount() == 2)
// Double-click detected
int index = list.locationToIndex(evt.getPoint());
else if (evt.getClickCount() == 3)
// Triple-click detected
int index = list.locationToIndex(evt.getPoint());
);
【讨论】:
请注意,如果列表中有空白区域,并且用户双击空白区域,这将检测到对列表中最后一个对象的双击。如果您只想检测包含项目的列表区域中的点击,您可以像这样检查: Rectangle r = list.getCellBounds(0, list.getLastVisibleIndex()); if (r != null && r.contains(evt.getPoint())) int index = list.locationToIndex(evt.getPoint()); 向 JList 询问当前选择的项目,而不是使用 locationToIndex 还不够吗?即只需调用 list.getSelectedIndex(). 此示例将通过多次单击任何鼠标按钮来触发。如果您只关心第一个按钮,您还需要检查if (evt.getButton() == MouseEvent.BUTTON1)
【参考方案2】:
(基于 Mohamed Saigh,接受的回复)
如果您使用的是 NetBeans
选择 JList > 事件窗口 > mouseClicked
private void jListNicknamesMouseClicked(java.awt.event.MouseEvent evt)
JList list = (JList)evt.getSource();
if (evt.getClickCount() == 2)
int index = list.locationToIndex(evt.getPoint());
System.out.println("index: "+index);
【讨论】:
【参考方案3】:我知道您有一个简单的解决方案,但您可能想查看List Action 以获得更通用的解决方案,让您可以使用鼠标和键盘。适当的 GUI 设计应该允许使用任何一种方法。
使用ListAction
的最基本示例是:
String[] data = "zero", "one", "two", "three", "four", "five" ;
JList list = new JList( data );
Action displayAction = new AbstractAction()
public void actionPerformed(ActionEvent e)
JList list = (JList)e.getSource();
System.out.println(list.getSelectedValue());
;
ListAction la = new ListAction(list, displayAction);
【讨论】:
以上是关于JList 元素上的双击事件的主要内容,如果未能解决你的问题,请参考以下文章