我有JList一个DefaultListModel.
如何在JList双击事件的反应中制作一个项目?
这是我的问题:我有一个jList和一个弹出菜单.当我右键单击jList时,弹出菜单显示.问题是鼠标指向的jList项目不会选择.我希望它能做到这一点.当我将光标指向列表中的某个项目并按下右键时,我想要发生两件事.选择我单击的项目并显示弹出菜单.
我试过这个:
jLists.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
jList.setSelectedIndex(jList.locationToIndex(e.getPoint()));
}
});
jList.setComponentPopupMenu(jPopupMenu);
Run Code Online (Sandbox Code Playgroud)
但它只显示弹出菜单.如果我删除这一行:
jList.setComponentPopupMenu(jPopupMenu);
Run Code Online (Sandbox Code Playgroud)
然后右键单击选择工作(但弹出菜单不显示).
那么,您认为使这两个功能(两者)都起作用的最佳方法是什么?
谢谢,抱歉我的英语.
我最近遇到了一个java中的错误,其中JList在使用鼠标更改值时将触发valueChanged()方法两次,并且在使用键盘更改值时仅触发一次.我刚刚在Oracle的网站上发现了一个关于此问题的错误(显然,这个错误超过了12年),我想知道是否有人可以向我解释为什么Oracle已经确定这不是缺陷(更不用说getValueIsAdjusting()在使用键盘时返回false.
对于有这个问题的任何人,我发现只是检查何时getValueIsAdjusting()是假的,然后运行我的方法的其余部分将解决问题.
class MyListListener implements ListSelectionListener {
public void valueChanged (ListSelectionEvent e) {
JList source = (JList) e.getSource();
// do something
}
}
JList myList = new JList (myModel);
myList.addListSelectionListener (new MyListListener());
Run Code Online (Sandbox Code Playgroud)
我做的很简单.我有一个JList.如果选择了列表中的项,则调用该处理程序.问题是当我从一个项目转到另一个项目时,处理程序被调用两次.如果第一个触发器传递原始选定项目,我可以看到使用,第二个触发器传递新项目.但是两次都传递了相同的新项目.那是什么意思?有没有办法阻止处理程序被调用两次?
我有一个JList很多项目,其中一个被选中.我想滚动到JList此处的所选项目,以便用户可以快速查看选择了哪个项目.
我怎样才能做到这一点?
String[] data = {"one", "two", "three", "four", /* AND A LOT MORE */};
JList dataList = new JList(data);
JScrollPane scrollPane = new JScrollPane(dataList);
Run Code Online (Sandbox Code Playgroud) 我有一个显示向量信息的JList.然后,用户可以添加和删除此向量中的信息.当从Vector中添加/删除项目时,是否可以刷新JFrame中的JList?目前我正在做..
list = new JList(names);
jframe.add(new JScrollPane(list), BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
但这并没有将JList刷新为任何新东西.我检查,我的矢量内容等确实改变了但列表没有刷新.为什么?我该怎么解决?
当我想要自动选择多个值时,我遇到了这个setSelectedValue()方法的问题,它仍然只选择了一个.有办法吗?JListJList
String[] items = { "Item 1", "Item 2", "Item 3", "Item 4" };
final JList theList = new JList(items);
theList.setSelectedValue("Item 1",true);
theList.setSelectedValue("Item 2",true);
Run Code Online (Sandbox Code Playgroud)
此代码仅显示Item 2为已选中.
任何人可以建议我在java中的任何方法或任何其他方式,我可以在某些事件发生时取消选择我的jlist项目?我试过这个,但这似乎不起作用
myJList.setSelectedIndex(-1);
myJList.ensureIndexIsVisible(-1);
Run Code Online (Sandbox Code Playgroud) 我有一个JList,我正在显示一些ID.我想捕获用户点击的ID并在其上显示JLabel.
String selected = jlist.getSelectedItem().toString();
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了我选择的JList值.但是这个代码必须放在一个按钮事件中,当我点击按钮时,它将获得JList值并将其分配给JLabel.
但是,我想要做的是,只要用户点击一个项目JList来JLabel实时更新.(无需单击按钮即可触发操作)
我有下一个代码:
listModel = new DefaultListModel();
listModel.addElement(dateFormat.format(new Date()) + ": Msg1");
messageList = new JList(listModel);
messageList.setLayoutOrientation(JList.VERTICAL);
messageScrollList = new JScrollPane(messageList);
messageScrollList.setPreferredSize(new Dimension(500, 200));
messageScrollList.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
});
Run Code Online (Sandbox Code Playgroud)
它会自动向下滚动.但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动.我怎样才能解决这个问题?
java ×10
jlist ×10
swing ×10
autoscroll ×1
java-7 ×1
jscrollpane ×1
menu ×1
multi-select ×1
netbeans ×1
popup ×1
scroll ×1
selection ×1