我一直在尋找一種方法來獲得JComboBox
,其中列表中的項目正常顯示,但在編輯字段中只顯示一個數字。可編輯JComboBox與編輯字段中的不同文本
我碰到這個代碼來(僅略作修改,以我的需求):
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
public class ComboBoxItem extends JFrame implements ActionListener {
public ComboBoxItem() {
Vector model = new Vector();
model.addElement(new Item(1, "car"));
model.addElement(new Item(2, "plane"));
model.addElement(new Item(3, "train"));
model.addElement(new Item(4, "boat"));
JComboBox comboBox;
comboBox = new JComboBox(model);
comboBox.addActionListener(this);
getContentPane().add(comboBox, BorderLayout.NORTH);
comboBox = new JComboBox(model);
// I want the comboBox editable.
//comboBox.setEditable(true);
comboBox.setRenderer(new ItemRenderer());
comboBox.addActionListener(this);
getContentPane().add(comboBox, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
Item item = (Item)comboBox.getSelectedItem();
System.out.println(item.getId() + " : " + item.getDescription());
}
class ItemRenderer extends BasicComboBoxRenderer {
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
if (value != null) {
Item item = (Item)value;
setText(item.getDescription().toUpperCase());
}
if (index == -1) {
Item item = (Item)value;
setText("" + item.getId());
}
return this;
}
}
class Item {
private int id;
private String description;
public Item(int id, String description) {
this.id = id;
this.description = description;
}
public int getId() {
return id;
}
public String getDescription() {
return description;
}
public String toString() {
return description;
}
}
public static void main(String[] args) {
JFrame frame = new ComboBoxItem();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
這種運作良好,直到我增加ComboBox可編輯comboBox.setEditable(true);
。
背景信息:
我打算從數據庫在編輯領域的用戶類型填充對象的彈出列表。當用戶從彈出列表中選擇一個項目時,編輯字段應該只顯示對象的id
,但彈出列表應該顯示更多信息,以便用戶可以做出明智的選擇。
任何人都可以幫助我做這項工作,無論是可編輯是打開還是關閉?
非常感謝。這個答案很簡短,乾淨而且直截了當。 – Dalendrion