2017-01-08 3 views
0

У меня есть JComboBox, которые имеют значение строить из двух частей INT-Струнных так:Set Selected Item JComboBox как MyString

01-one 
02-two 
03-three 

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

myComboBox.setSelectedItem("?" + myString); 

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

myComboBox.setSelectedItem("like myString"); 

У кого-то есть идея установить элемент, который НРАВИТСЯ в значение combobox, или это невозможно?

+0

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

+0

mmm, я действительно не думаю, что для этого решения, спасибо @HovercraftFullOfEels это может мне помочь :) –

+0

Возможный дубликат [Как сравнить почти похожие строки в Java? (String distance measure)] (http://stackoverflow.com/questions/2084730/how-to-compare-almost-similar-strings-in-java-string-distance-measure) –

ответ

2

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

Например:

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

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

+0

спасибо @Maryke Mostert –

1

Если вы хотите, чтобы точно указать строку, что вы указываете в описании, я бы создал класс для представления вашего конкретного элемента, поддерживая в нем строку 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; 
    } 
} 
+0

спасибо @Roberto Attias –