JList - 检索项目

时间:2018-06-15 11:38:34

标签: java swing 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();
        }
    }
}   

1 个答案:

答案 0 :(得分:1)

  

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

通常只需单击鼠标即可完成此操作。

通常在用户:

时调用Action
  1. 使用Enter键或
  2. 双击项目
  3. 对于此类处理,请检查List Action,以便在上述任何一种情况下提供Action

    否则你应该使用MouseListener,而不是上面评论中建议的ListSelectionListener,因为用户应该能够使用向下/向上箭头键浏览列表中的项目而不会导致操作被调用。阅读How to Write a MouseListener上的Swing教程中的部分以获取工作示例。