Установить выбранный элемент 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;
}
}