有没有办法在JCombobox Netbeans Swing Matisse中使用GUI设置键值字符串映射/对? 下面的屏幕截图允许插入单个列表
但是有没有办法使用Matisse GUI而不是像
这样的代码插入Map / Key-Value String PairValue - Display
_____ _____
ITEM1 - Item 1
ITEM2 - Item 2
ITEM3 - Item 3
ITEM4 - Item 4
在HTML中选择选项标签存储的值和显示值。
答案 0 :(得分:2)
这就是为什么我要问的是使用GUI而不是代码
不依赖IDE为您编写/生成代码。代码永远不可移植。
也许您可以创建所有键/值对的文本文件。然后创建一个简单的例程,读取每个文件解析数据并将自定义对象添加到ComboBoxModel。
有关此类自定义对象的示例,请查看Combo Box With Hidden Data。这是一个简单的对象,它覆盖toString()方法以在组合框中显示值。
对于那些暗示你应该使用自定义渲染器的人来说,他们只有一半是正确的。查看Combo Box With Custom Renderer,它允许您使用自定义渲染器,而不会破坏组合框的默认功能。
答案 1 :(得分:1)
“仅使用GUI?”
我认为你的意思是从设计角度来看。我不这么认为。只需手动编码即可。这并不困难。
以下是使用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();
}
});
}
}