JComboBox에 런타임시 변경할 수있는 임의 항목이 있습니다. getListCellRendererComponent (...)를 사용하여 JLabel로 설정했습니다. 나는 또한 일부 Jlabel을 setEnabled (false)로 설정했다.선택된 JComboBox 항목이 활성화 또는 비활성화되었는지 감지
사용자가 해당 JComboBox에서 항목을 선택하면 이 사용 또는 사용 중지 된 경우 감지 할 수있는 방법이 있습니까?
JComboBox에 런타임시 변경할 수있는 임의 항목이 있습니다. getListCellRendererComponent (...)를 사용하여 JLabel로 설정했습니다. 나는 또한 일부 Jlabel을 setEnabled (false)로 설정했다.선택된 JComboBox 항목이 활성화 또는 비활성화되었는지 감지
사용자가 해당 JComboBox에서 항목을 선택하면 이 사용 또는 사용 중지 된 경우 감지 할 수있는 방법이 있습니까?
renederer는 그 (것)들을 페인트하기 만하므로 검사 할 isEnabled 값이 없습니다. 그 대신 cellRenderer가 선택을 볼 때 값이 허용되는지를 결정하는 데 사용하는 동일한 논리를 사용하십시오. 또는 비활성화 된 값 대신 목록에서 해당 값을 제거 할 수도 있습니다.
물론 '같은 논리'를 사용하면 메서드에 추출하여 해당 메서드를 호출해야합니다. –
동일한 논리를 사용하는 것이 나의 대안이었습니다. 나는 다른 방법이 있기를 바랐다. – Brad
목록/콤보 (또는 컬렉션 구성 요소)의 항목은 일부 상태가있는 비즈니스 개체의 표현으로 간주됩니다. 그런 다음 다른 상태를 인식하는 렌더러를 구현하고 렌더러에서 상태를 적절한 시각적 표현으로 매핑합니다.
// 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());
}
어쩌면 내가 설명을 잘못 이해하고 있지만 ... _components_를 (를) 절대로 항목으로 추가하지 마십시오. 너 - 그러지? – kleopatra
@kleopatra : 예, 할 수 있습니다. 문제가 있습니까? 나는 아이콘을 넣을 + 일부 항목을 해제해야합니다. – Brad
문제는 별도의 관심사를 섞어 버리는 것입니다. 스윙은 분리 된 상태로 유지하는 데 긴 시간을 소요합니다. 그래서 렌더러가 있습니다. 더 답답한 디자인하는 방법에 대한 내 대답을 참조하십시오. – kleopatra