检测是否启用或禁用了所选的JComboBox项

时间:2011-04-10 13:08:28

标签: java swing jcombobox

我有一个JComboBox填充了一些随机项,可以在运行时更改。我使用getListCellRendererComponent(...)将它们设置为JLabel。我还将其中一些Jlabel设置为setEnabled(false)。

当用户从该JComboBox中选择一个项目时,有没有办法可以检测它是启用还是禁用?

2 个答案:

答案 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());
}