Netbeans Swing Matisse JCombobox пара ключ-значение
Есть ли способ установить ключ / значение String Map/Pair в JCombobox Netbeans Swing Matisse, используя только графический интерфейс? Ниже скриншот позволяет вставить один список
но есть ли способ вставить карту / пару строк-значений, используя графический интерфейс Matisse вместо кода, как
Value - Display
_____ _____
ITEM1 - Item 1
ITEM2 - Item 2
ITEM3 - Item 3
ITEM4 - Item 4
как в HTML, выберите опцию тега сохраненное значение и отображаемое значение.
2 ответа
Так вот почему я спрашиваю об использовании GUI, а не кода
Не полагайтесь на IDE, чтобы написать / сгенерировать ваш код для вас. Код никогда не будет переносимым.
Может быть, вы можете создать текстовый файл из всех ваших пар ключ / значение. Затем вы создаете простую подпрограмму, которая читает каждый файл, анализирует данные и добавляет пользовательский объект в ComboBoxModel.
Для примера такого пользовательского объекта проверьте поле со списком со скрытыми данными. Это простой объект, который переопределяет метод toString() для отображения значения в поле со списком.
А для тех, кто предлагает вам использовать пользовательский рендерер, ну, они только наполовину правы. Проверьте поле со списком с пользовательским средством визуализации, которое позволяет вам использовать пользовательское средство визуализации, не нарушая функциональные возможности поля со списком по умолчанию.
"использовать только графический интерфейс? "
Я предполагаю, что вы имеете в виду с точки зрения дизайна. Я так не думаю. Просто код вручную. Это не так сложно.
Вот пример использования Student
объект в качестве значения карты, а Student
id
как карта key
, key
это отображаемое значение в JComboBox
, Значение извлекается из выбора с помощью get(id)
с карты.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
public class MapCombo {
public MapCombo() {
Map<Integer, Student> map = createMap();
JComboBox cbox = createComboBox(map);
cbox.setBorder(new EmptyBorder(20, 20, 20, 20));
JFrame frame = new JFrame("Map ComboBox");
frame.add(cbox);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private Map<Integer, Student> createMap() {
Map<Integer, Student> map = new HashMap<>();
Student s1 = new Student(23, "Micheal Jordan");
Student s2 = new Student(6, "Lebron James");
Student s3 = new Student(3, "Chris Paul");
Student s4 = new Student(8, "Kobe Briant");
Student s5 = new Student(21, "Tim Duncan");
map.put(s1.getId(), s1);
map.put(s2.getId(), s2);
map.put(s3.getId(), s3);
map.put(s4.getId(), s4);
map.put(s5.getId(), s5);
return map;
}
private JComboBox createComboBox(final Map<Integer, Student> map) {
final JComboBox cbox = new JComboBox();
for (Integer id : map.keySet()) {
cbox.addItem(id);
}
cbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Integer id = (Integer)cbox.getSelectedItem();
System.out.println(map.get(id));
}
});
return cbox;
}
public class Student {
String name;
Integer id;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
@Override
public String toString() {
return "Name: " + name + " - Stud ID: " + id;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MapCombo();
}
});
}
}