我尝试根据JList
中选择的值将文本字段的文本设置为字符串。
JList
= list
LinkedList<WordPair>
= wordpair_list
WordPair
包含wordA
和wordB
如果有人能向我解释为什么这不起作用,我会永远欠你的债。在这个程序中显然有很多代码,但stackoverflow
似乎认为我的文本与代码比率是不成比例的。如果您个人想要其他代码,如果您愿意接受挑战,我很乐意将其发送给您。
public void showTranslation(){
int i = wordpair_list.indexOf(list.getSelectedValue());
textField.setText(wordpair_list.get(i).getWordB());
}
public Dictionary(Object o){
if (o instanceof String){
String filename = (String) o;
File file = new File(filename);
Scanner sc = null;
try {
sc = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (sc.hasNextLine()){
words.add(new WordPair(sc.nextLine()));
}
}
}
public WordPair(String arg0) {
arg0.trim();
int equalsIndex = arg0.indexOf("=");
this.wordA = arg0.substring(0, equalsIndex-1);
this.wordB = arg0.substring(equalsIndex+1);
}
答案 0 :(得分:0)
很难用您提供的代码来判断,但如果wordpar_list只包含2个元素(wordA和wordB),则list.getSelectedValue()的输出只能是0或1.我会尝试打印出来(或者debug)看看list.getSelectedValue()给你的是什么,但它可能不像你期望的那样是0或1。
希望有所帮助!
答案 1 :(得分:0)
您的wordpair_list
不包含任何list.getSelectedValue()
次返回。请注意,当指定的对象未包含在列表中时,indexOf()方法将返回-1
。
您可以通过打印/记录i
的值来确认。
在修复代码方面,如果wordpair_list
实际 包含list.getSelectedValue()
,则您的代码可以更简洁地写为:
public void showTranslation(){
textField.setText(list.getSelectedValue().getWordB());
}
但由于该值不在列表中,因此您必须尝试其他方法。一种可能性是您混淆了类型,并在wordpair_list
中查找不兼容类型的对象。另一种可能性是您需要覆盖equals()
(因此也是hashCode()
),以便indexOf()
查找成功。
有关最后一位的更多信息:What issues should be considered when overriding equals and hashCode in Java?
答案 2 :(得分:0)
这是一个可以使用调试器的好例子。或者插入一堆System.out.println()来打印出一些本地值。
答案 3 :(得分:0)
首先需要调试此代码,打印出从indexOf()
返回的内容
第二,你可能不应该使用LinkedList
而是使用ArrayList
来获得最佳实践。
另外,你可能需要将wordpair_list.get(i)
投射到WordPair
或其他任何对象。