我试图根据在JList中选择的值将文本字段的文本设置为字符串。
JList = listLinkedList<WordPair> = wordpair_listWordPair包含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);
}发布于 2014-04-09 01:09:26
您的wordpair_list不包含任何list.getSelectedValue()返回的内容。注意,当指定的对象不包含在列表中时,indexOf()方法将返回-1。
您可以通过打印/记录i的值来确认这一点。
在修复代码方面,如果wordpair_list确实包含list.getSelectedValue(),那么您的代码可以更简洁地编写为:
public void showTranslation(){
textField.setText(list.getSelectedValue().getWordB());
}但是由于这个值不在列表中,所以您必须尝试其他方法。一种可能是您混淆了您的类型,并且正在wordpair_list中查找不兼容类型的对象。另一种可能是您需要覆盖equals() (因此,也包括hashCode()),以便您的indexOf()查找成功。
关于最后一段的更多信息如下:当在Java中覆盖等于和hashCode时,应该考虑哪些问题?
发布于 2014-04-09 01:09:17
从您提供的代码很难判断,但是如果wordpar_list只包含2个元素(wordA和wordB),那么list.getSelectedValue()的输出只能是0或1。我会尝试打印(或调试)以查看list.getSelectedValue()给您带来了什么,但是它可能不是您所期望的0或1。
希望这能帮上忙!
发布于 2014-04-09 01:11:23
这是一个很好的例子,您可以使用调试器。或者插入一堆System.out.println()来打印出一些本地值。
https://stackoverflow.com/questions/22951014
复制相似问题