Мне нужен метод статической утилиты для выбора объектов из List<T>
. Я сталкиваюсь с двумя проблемами. Вот короткая тестовая программа:
package com.example.test.gui;
import java.util.Arrays;
import java.util.List;
import javax.swing.JOptionPane;
public class SelectionTest {
public interface NameExtractor<T> {
public String extractName(T object);
}
static public <T> T selectFromList(String message, List<T> list, NameExtractor<T> nameExtractor) {
String[] choices = new String[list.size()];
int i = 0;
for (T t : list)
choices[i++] = nameExtractor.extractName(t);
Object s = JOptionPane.showInputDialog(null, message, "",
JOptionPane.QUESTION_MESSAGE, null, choices, null);
System.out.println(s);
// crap, we get a string back. Now how do we get back the object in question?
return null;
}
static public void main(String[] args)
{
List<Integer> numbers = Arrays.asList(1,2,3,4,10);
System.out.println(selectFromList("Pick one", numbers, new NameExtractor<Integer>(){
@Override public String extractName(Integer object) {
return object.toString();
}
}));
}
}
Есть ли альтернатива JOptionPane.showInputDialog () , которая позволила бы мне получить индекс списка, а не отображаемую строку?
edit: Я бы также предпочел использовать JList, а не поле со списком или то, что JOptionPane хочет по умолчанию.