【问题标题】:JComboBox - Array list setting selected itemJComboBox - 数组列表设置选中项
【发布时间】:2014-01-27 19:17:17
【问题描述】:

大家好,我在设置组合框的选定项目时遇到了一点问题

我目前正在读取一个文件,其中包含一个人的对象

我有一个组合框,它是通过使用其中包含 3 个名称的数组列表制成的

我想读取文件获取该人文件中的当前名称并将该名称设置为我的组合框字段

这是我目前所拥有的:

for(Person p : personList){
    if(p.getName() == personList.toString()){
     personComboBox.setSelectedItem(p.getName());
    }
}

我已经设法通读了该文件,我只是想更新我在组合框中选择的项目

【问题讨论】:

  • 首先不要使用==比较字符串值。使用equals()。其次,我不确定您是否要将名称与列表的字符串表示形式进行比较。这没有任何意义。
  • 我的 personList 是 Person 类型
  • 你知道personList.toString() 是做什么的吗?我建议你打印出来看看它输出了什么。
  • 我们可以看看 Person 类吗?
  • 好的,我如何获取我的数组列表中该索引处的值?

标签: java swing arraylist combobox selection


【解决方案1】:

1 - personList 是一个数组,而不是一个项目。 2 - 永远不要使用 == 来比较字符串!首选 .equals()。

你应该做的是这样的想法:

String personInTheFile = "Fubar Rabuf";
for(int i=0; i<personComboBox.getItemCount(); i++){
    Person p = personComboBox.getItemAt(i);
    if(personInTheFile.equals(p.toString())){
        personComboBox.setSelectedIndex(i);
        break;
    }
}

【讨论】:

  • 我的 arraylist 保存着我的组合框的值,而 person 用于检查该数组的值是否等于我从文件中提取的 person 对象
  • 但是怎么做呢?在您的档案中,您只有一个人,而不是人员列表,对吗?该数组内部可以有许多“人”,但您将它与一个“人”进行比较。这永远不会返回 true,即使您使用 == 进行比较,它比较的是内存地址而不是内容。在上面的代码中,我解释了一种实现您想要的简单方法(如果我正确理解您的疑问)。
猜你喜欢
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2015-06-17
  • 2011-04-27
  • 2011-06-18
  • 2017-10-19
相关资源
最近更新 更多