更新 JList 时出现问题
我的项目遇到了问题,基本上它是一个存储同义词的小应用程序。 我有 2 个 JPanel,其中填充了两个 JList,一个用于单词列表,另一个用于对应的同义词。 当您单击一个 JList 上的某个单词时,对应的同义词会出现在另一个 JList 上 然后有 2 个 JTextFields,用于添加单词-同义词对,在一个字段中插入单词,在另一个字段中插入同义词,将它们拆分,使用 synonym.split(" ") 创建一个数组,并将所有内容存储在 Map 中 这是我添加到单词 JList 的 ListSelectionListener
woordenList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
if (evt.getValueIsAdjusting()){
return;
}
getSynoniemen(evt);
}
});
这是获取同义词的方法
private void getSynoniemen(ListSelectionEvent e){
if(e.getValueIsAdjusting()){
return;
}else{
String woord=(String)woordenList.getSelectedValue();
Object[] synArray=(Object[])beheer.getValues(woord);
synoniemenList.setListData(synArray);
}
}
如果我在没有选择任何项目时将单词和同义词添加到列表中,它可以正常工作,如果我执行添加项目的操作,而相反,我在 word-JList 中选择了一个单词,调用带有空字符串的方法 getValues() ,引发异常。我不明白为什么,在列表中添加元素也会触发列表选择。 有什么建议吗?
I'm having a poblem with my project, basically its a small app that stores synonyms.
I have 2 JPanels populated with two JLists, one for the list of words and one with the correspondent synonyms.
When you click on a word on one JList, the correspondent synonyms appears on the other JList
then there are 2 JTextFields, for adding a word-synonym pair, in one field you insert the word in the other you insert the synonyms, split them creating an array with synonyms.split(" ") and store all in a Map
this is the ListSelectionListener i have added to the word JList
woordenList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
if (evt.getValueIsAdjusting()){
return;
}
getSynoniemen(evt);
}
});
And this is the method that gets the synonyms
private void getSynoniemen(ListSelectionEvent e){
if(e.getValueIsAdjusting()){
return;
}else{
String woord=(String)woordenList.getSelectedValue();
Object[] synArray=(Object[])beheer.getValues(woord);
synoniemenList.setListData(synArray);
}
}
If i add a word and synonyms into the lists when no item is selected it works fine, if i do this operation of adding items while instead, i have a word selected in the word-JList, the method getValues() with a null string is called, throwing an exception. i dont understand why, adding an element on the list also fires a list selection.
Any advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须在代码中的某个位置更改所选索引。
下载并测试 如何使用列表的 ListDemo 示例。当您运行代码并“雇用”一个人时,就会触发列表选择事件(我向侦听器添加了 System.out.println(...) )。然后,如果您注释掉:
该事件不会被触发。所以你的代码有问题。将您的代码与工作示例代码进行比较,看看是否不同。
如果您需要更多帮助,请发布一个 SSCCE 来说明问题。
Somewhere in your code you must be changing the selected index.
Download and test the ListDemo example for How to Use Lists. When you run the code and "Hire" a person, then the list selection event fires (I added a System.out.println(...) to the listener). Then if you comment out:
the event is not fired. So you have a problem in your code. Compare your code to the working example code to see what if different.
If you need more help then post a SSCCE that demonstrates the problem.
我建议使用 DefaultListModel 来操作 JList 的内容。
I would recommend using the DefaultListModel to manipulate the contents of the JList.
这是我的项目的 SSCCE,我省略了所有例外和注释以及不相关的按钮、标签、方法。
尝试插入一个单词及其同义词,然后选择一个单词,然后在选择该单词的同时尝试插入另一对单词同义词,会出现异常
导入 javax.swing.AbstractListModel;
导入 javax.swing.DefaultListModel;
导入 javax.swing.JList;
导入javax.swing.JPanel;
导入 javax.swing.JFrame;
导入 javax.swing.JScrollPane;
导入java.awt.矩形;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Set;
导入 javax.swing.JTextField;
导入 javax.swing.JButton;
导入 javax.swing.event.ListSelectionEvent;
导入 javax.swing.event.ListSelectionListener;
公共类同义词扩展 JFrame {
}
This is a SSCCE of my project, i've left out all exceptions and comments and non relevant buttons, labels, methods.
Try to insert a word with its synonyms, and then select a word, then while the word is selected try to insert another pair word-synonyms, there will come the exception
import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Synonims extends JFrame {
}