【发布时间】:2021-10-07 22:09:44
【问题描述】:
我正在尝试创建一个名为 MyComboBoxModel 的自定义 JComboBox 模型。在模型中指定了项目列表。每个项目都是 CompanyDropItem 类的一个实例。我似乎能够用 5 个项目填充组合框,但它们没有正确显示。下拉列表显示内存地址列表,而不是每个 CompanyDropItem 的 .companyName_ 值。另外,我不相信我已将其设置为在选择更改时正确返回每个 CompanyDropItem 的 .companyId_ 值。
代码只是试图让概念发挥作用的游乐场。我可以发布创建下拉列表的整个代码:
package Package;
import java.awt.Color;
import java.awt.Panel;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
static MyComboBoxModel model;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame();
frame.setSize(200, 200);
JPanel panel = new JPanel();
panel.setBackground(Color.red);
frame.add(panel);
model = new MyComboBoxModel();
CompanyDropItem[] items = new CompanyDropItem[5];
items[0] = new CompanyDropItem(1, "A");
items[1] = new CompanyDropItem(2, "B");
items[2] = new CompanyDropItem(3, "C");
items[3] = new CompanyDropItem(4, "D");
items[4] = new CompanyDropItem(5, "E");
model.companyDropItems = items;
JComboBox cbox = new JComboBox(model);
cbox.setMaximumRowCount(5);
frame.add(cbox);
frame.setVisible(true);
}
static class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {
public CompanyDropItem[] companyDropItems;
String selection = null;
public Object getElementAt(int index) {
return companyDropItems[index];
}
public int getSize() {
return companyDropItems.length;
}
public void setSelectedItem(Object anItem) {
// ?
}
public Object getSelectedItem() {
return selection;
}
}
private static class CompanyDropItem {
final int companyId_;
final String companyName_;
private CompanyDropItem(int companyId, String companyName) {
companyId_ = companyId;
companyName_ = companyName;
}
}
}
感谢您的帮助
【问题讨论】:
-
你需要实现
CompanyDropItem.toString()你不需要make up different names 为ctor 参数顺便说一句。下划线:仅限于大写的常量名称。包名中没有大写字母 -
不需要使用自定义的ComboBoxModel。