JList - 检索项目



我被Jlist困住了,从没想过Jlist会那么复杂。

用鼠标左键单击Jlist项目,我想做一些操作。我知道我需要动作侦听器,但我无法让它工作。

在我的特定情况下,JList 中有保存.sql文件的路径。当我在JList中单击项目时,我想从该文件中读取并将其保存到JTextArea。

也许我在代码中将侦听器放在错误的位置?还是我编码错误?

型号名称 = 型号

JList Name = SQLScriptList

Jtextarea Name = SQLEditor

使用此代码,我尝试将列表中的项目保存在特定标签或文本框中,只是为了查看操作是否有效。

//Copy from LIST to TextArea
MouseListener mouseListener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
String selectedItem = (String) SQLScriptList.getSelectedValue();
// add selectedItem to your second list.
DefaultListModel model = (DefaultListModel) SQLScriptList.getModel();
if (model == null) {
//model = new DefaultListModel();
SQLScriptList.setModel(model);
}
model.addElement(selectedItem);
}
SQLScriptList.addMouseListener(mouseListener);
}
//list.addMouseListener(mouseListener);
};
<小时 />

已解决

以下是在我的情况下有效的解决方案:

private void SQLScriptListMouseClicked(java.awt.event.MouseEvent evt) {                                           
JList list = (JList) evt.getSource();
if (evt.getClickCount() == 2) {
int index = list.locationToIndex(evt.getPoint()); //GET INDEX 0,1,2,3
try {
FileReader reader = new FileReader(files[index]);
SQLEditor.read(reader, files[index]); //Object of JTextArea
} catch (Exception e) {
e.printStackTrace();
}
}
}   

当我点击JList中的项目时,我想从该文件中读取并将其保存到JTextArea。

通常,这不是通过单击鼠标完成的。

通常,当用户执行以下操作时,将调用操作:

  1. 使用 Enter 键,或
  2. 双击该项目

对于这种类型的处理,请查看列表操作,该操作允许您提供在上述任一情况下要调用的Action

否则,您应该使用MouseListener,而不是上面注释中建议的 ListSelectionListener,因为用户应该能够使用向下/向上箭头键浏览列表中的项目,而不会导致调用操作。阅读 Swing 教程中关于如何编写鼠标侦听器的部分,了解工作示例。

最新更新