我有一个JComboBox填充了一些随机项,可以在运行时更改。我使用getListCellRendererComponent(...)将它们设置为JLabel。我还将其中一些Jlabel设置为setEnabled(false)。
当用户从该JComboBox中选择一个项目时,有没有办法可以检测它是启用还是禁用?
答案 0 :(得分:2)
renederer只绘制它们,因此不会检查isEnabled值。而是在查看选择时使用与cellRenderer相同的逻辑来确定是否允许值。或者可能从列表中删除这些值而不是禁用。
答案 1 :(得分:1)
list / combo(或任何集合组件)中的项应该是具有某种状态的业务对象的表示。然后实现了解不同状态的渲染器,并使它们(渲染器)将状态映射到适当的可视化表示。
// the item
public class Valve {
private boolean open;
private boolean canOperate;
private Point location;
// getters and methods as appropriate
public boolean isOpen() { ...
...
}
// custom renderer
Component getListCellRendererComponent(....) {
// normal config, assuming you subclass DefaultListCellRender
super.getListCellRendererComponent(...)
if (value instanceof Valve) {
configFromValve((Valve) value)
}
return this;
}
private void configFromValve(Valve valve) {
setText("P: (" + valve.location().x + "," + valve.getLocation().y + ")");
setIcon(valve.isOpen() ? openIcon : closedIcon);
setEnabled(valve.canOperate());
}