これはかなり一般的な問題であり、私が使用した解決策は、後で検索して見つけたものと似ています。現在選択されているインデックスに基づいてそれ自体を有効または無効にする を使用ListCellRenderer
して を実装します。JLabel
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
UIDefaults defaults = UIManager.getDefaults();
Color fc;
if (index == 1) {
setEnabled(false);
fc = defaults.getColor("Label.disabledForeground");
setFocusable(false);
} else {
// fc = defaults.getColor("Label.foreground");
fc = list.getForeground();
setEnabled(list.isEnabled());
setFocusable(true);
}
setForeground(fc);
setBackground(isSelected ? list.getSelectionBackground() : list
.getBackground());
return this;
}
setFocusable
問題は、視覚的にリスト項目が無効として表示されていても、呼び出しにもかかわらず選択できることです。実際に無効にするにはどうすればよいですか?