Netbeans Swing Matisse JCombobox键值对

时间:2014-02-14 05:20:47

标签: java swing netbeans jcombobox matisse

有没有办法在JCombobox Netbeans Swing Matisse中使用GUI设置键值字符串映射/对? 下面的屏幕截图允许插入单个列表 JComboBox List Data

但是有没有办法使用Matisse GUI而不是像

这样的代码插入Map / Key-Value String Pair
Value - Display
_____   _____
ITEM1 - Item 1
ITEM2 - Item 2
ITEM3 - Item 3
ITEM4 - Item 4

在HTML中选择选项标签存储的值和显示值。

2 个答案:

答案 0 :(得分:2)

  

这就是为什么我要问的是使用GUI而不是代码

不依赖IDE为您编写/生成代码。代码永远不可移植。

也许您可以创建所有键/值对的文本文件。然后创建一个简单的例程,读取每个文件解析数据并将自定义对象添加到ComboBoxModel。

有关此类自定义对象的示例,请查看Combo Box With Hidden Data。这是一个简单的对象,它覆盖toString()方法以在组合框中显示值。

对于那些暗示你应该使用自定义渲染器的人来说,他们只有一半是正确的。查看Combo Box With Custom Renderer,它允许您使用自定义渲染器,而不会破坏组合框的默认功能。

答案 1 :(得分:1)

  

“仅使用GUI?”

我认为你的意思是从设计角度来看。我不这么认为。只需手动编码即可。这并不困难。

以下是使用Student对象作为地图值,将Student id作为地图key的示例。 keyJComboBox中的显示值。使用地图中的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();
            }
        });
    }
}