java - jlist 由 arrayList 填充。单击项目时,信息应显示在 jTextArea 中。但它做了两次

标签 java swing user-interface

这是框架的构造函数

     public LibraryFrame() {
    mod1 = new javax.swing.DefaultListModel();
    books = new ArrayList<>();
    Book b1 = new Book("book1","aAuthor","aPublisher","aIsbn",5,0);
    books.add(b1);
    mod1.addElement(b1.title);
    initComponents();
}

这里是监听器

        private void viewStockListValueChanged(javax.swing.event.ListSelectionEvent evt) {
           int selected = viewStockList.getSelectedIndex();
    String info = books.get(selected).title;
    viewStockArea.insert(info,0);
}

当我为列表选择一个项目时,标题会两次插入文本区域(最终成为 book1book1 )

我已经尽可能多地研究了关于听众的问题,但我找不到解决方案。感谢任何帮助

编辑:感谢 kentcdodds,找到了解决方案。本质上,监听器创建了两个事件。查看他的回答以获得进一步的解释。这是正确工作的完成代码

  private void viewStockListValueChanged(javax.swing.event.ListSelectionEvent evt) {
          if (!evt.getValueIsAdjusting()){
                    int selected = viewStockList.getSelectedIndex();
    String info = books.get(selected).title;
    viewStockArea.insert(info,0);  
          }


}

最佳答案

这就是 JList 选择更改事件的工作方式。它激活两个事件。参见 this answer类似的问题。

关于java - jlist 由 arrayList 填充。单击项目时,信息应显示在 jTextArea 中。但它做了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373205/

相关文章:

python - 获取文件保存的目录(tkinter filesave 提示)

java - 基于基本JAVA控制台的菜单问题

java hashMap并发修改异常

java - 递增变量

java - 将自定义 jtable 模型表类作为参数传递

java - 我如何正确对齐此文本?

android - 禁用 Flutter Hero 反向动画

java - 如何访问此 LDAP 对象的属性?

java - 一段时间没有输入后如何执行

java - 如何确定哪些行在可滚动的 JTextArea 中可见?