Netbeans Swing Matisse JCombobox пара ключ-значение

Есть ли способ установить ключ / значение String Map/Pair в JCombobox Netbeans Swing Matisse, используя только графический интерфейс? Ниже скриншот позволяет вставить один списокДанные списка JComboBox

но есть ли способ вставить карту / пару строк-значений, используя графический интерфейс Matisse вместо кода, как

Value - Display
_____   _____
ITEM1 - Item 1
ITEM2 - Item 2
ITEM3 - Item 3
ITEM4 - Item 4

как в HTML, выберите опцию тега сохраненное значение и отображаемое значение.

2 ответа

Решение

Так вот почему я спрашиваю об использовании GUI, а не кода

Не полагайтесь на IDE, чтобы написать / сгенерировать ваш код для вас. Код никогда не будет переносимым.

Может быть, вы можете создать текстовый файл из всех ваших пар ключ / значение. Затем вы создаете простую подпрограмму, которая читает каждый файл, анализирует данные и добавляет пользовательский объект в ComboBoxModel.

Для примера такого пользовательского объекта проверьте поле со списком со скрытыми данными. Это простой объект, который переопределяет метод toString() для отображения значения в поле со списком.

А для тех, кто предлагает вам использовать пользовательский рендерер, ну, они только наполовину правы. Проверьте поле со списком с пользовательским средством визуализации, которое позволяет вам использовать пользовательское средство визуализации, не нарушая функциональные возможности поля со списком по умолчанию.

"использовать только графический интерфейс? "

Я предполагаю, что вы имеете в виду с точки зрения дизайна. Я так не думаю. Просто код вручную. Это не так сложно.

Вот пример использования Student объект в качестве значения карты, а Studentid как карта 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();
            }
        });
    }
}
Другие вопросы по тегам