Установить выбранный элемент JComboBox из строки

У меня есть JComboBox значения которых строятся из двух частей int-String следующим образом:

01-one
02-two
03-three

Так что теперь у меня есть только String часть, и хочу setSelectedItem элемент с этой частью, но я думаю, что это невозможно, потому что значения не совпадают или не совпадают

myComboBox.setSelectedItem("?" + myString);

Итак, что я хочу сделать, это:

myComboBox.setSelectedItem("like myString");

У кого-то есть идея установить выбранный элемент, который похож на значение в выпадающем списке или это невозможно?

2 ответа

Решение

Вы можете попробовать использовать .contains метод, в котором вы видите, содержит ли первый элемент в поле со списком это конкретное слово, и повторяете его, пока не найдете конкретный индекс.

Например:

if (jComboBox1.getItemAt(0).toString ().contains ("two")) 
{ 
    jComboBox1.setSelectedIndex(0);
}

И повторите этот шаг или попробуйте использовать цикл for, это здорово, если ваш комбинированный список содержит много элементов.

Если вы хотите иметь возможность выбирать точно по строке, что и указано в описании, я бы создал класс для представления вашего конкретного элемента, сохранив в нем int и string как отдельные поля и переопределив toString() вернуть представление, которое вы хотите. Затем вы можете иметь метод поиска вашего элемента на основе одной строки. Для относительно небольшого количества предметов это эффективно и просто. Если бы у вас было большое количество элементов, я бы предложил сохранить их как значения в HashMap используя строку в качестве ключа.

import java.awt.BorderLayout;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JComboBox;
import javax.swing.JFrame;

class Item {
  int intValue;
  String strValue;

  public Item(int intValue, String strValue) {
    this.intValue = intValue;
    this.strValue = strValue;
  }

  public String toString() {
    return intValue + " - " + strValue;
  }
}

public class TestCombo {
  private static JComboBox<Item> cb;
  public static void main(String[]args) {
    JFrame f = new JFrame();
    f.setSize(640,400);
    cb = new JComboBox<>();
    cb.addItem(new Item(1, "one"));
    cb.addItem(new Item(2, "two"));
    cb.addItem(new Item(3, "three"));
    f.getContentPane().setLayout(new BorderLayout());
    f.getContentPane().add(cb, BorderLayout.NORTH);
    f.setVisible(true);

    selectItemByString("three");
  }

  private static void selectItemByString(String s) {
    for (int i=0; i<cb.getItemCount(); i++) {
      if (cb.getItemAt(i).strValue.equals(s)) {
        cb.setSelectedIndex(i);
        break;
      }
    }
    return;
  }
}
Другие вопросы по тегам