gpt4 book ai didi

java - 具有自己的对象的组合框

转载 作者:行者123 更新时间:2023-12-01 09:53:11 24 4
gpt4 key购买 nike

我正在尝试使用 JComboBox 在我自己编写的类的不同实例之间进行选择,我已经为其实现了渲染器类:

class BackupJobRenderer extends JLabel implements ListCellRenderer {
private static final Color HIGHLIGHT_COLOR = new Color(0, 0, 128);

public BackupJobRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);}

public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
BackupJob bjob = (BackupJob) value;
setText(bjob.getName());


if (isSelected) {
setBackground(HIGHLIGHT_COLOR);
setForeground(Color.white);
} else {
setBackground(Color.white);
setForeground(Color.black);
}
return this;
}

当我尝试像下面这样初始化组合框时:

 //backMan.getArrayJobs returns an Array of BackupJobs
comboBoxJobs = new JComboBox(backMan.getArrayJobs());
comboBoxJobs.setRenderer(new BackupJobRenderer());
comboBoxJobs.setMaximumRowCount(3);
comboBoxJobs.setEnabled(true);

尽管根据调试器的说法,组合框保持为空,但数组的元素似乎存在于组合框的“dataModel”中。

我在这里做错了什么?

最佳答案

创建DefaultComboBoxModel并将数组放入此模型,如下所示。

DefaultComboBoxModel model = new DefaultComboBoxModel<>(yourObjectArray);
JComboBox<Object> combo = new JComboBox<>(model);
combo.setRenderer(new BackupJobRenderer());

你的渲染器类应该是:

class BackupJobRenderer extends DefaultListCellRenderer {

public Component getListCellRendererComponent(......) {
JLabel label = (JLabel)super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);

if(value !=null && value instanceof BackupJob) {
BackupJob backup = (BackupJob) value;
label.setText(backup.getName());


if (isSelected) {
label.setBackground(HIGHLIGHT_COLOR);
label.setForeground(Color.white);
} else {
label.setBackground(Color.white);
label.setForeground(Color.black);
}
}
return label;
}
}

关于java - 具有自己的对象的组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com