2011-02-07 5 views
3

JCheckBox을 사용/사용 중지 표시기로 사용한다고 가정 해 보겠습니다. 을 사용하여 JCheckBox에서 마우스 클릭을 사용 중지합니다. 그러나 setEnabled(false)도 checkBox와 checkBox의 텍스트를 회색으로 표시합니다. 회색 화가 발생하지 않도록 setEnabled(false)을 사용자 정의하는 방법이 있습니까?Java의 setEnabled (false)를 사용자 정의하는 방법이 있습니까?

그럴 수 없다면 ButtonModel을 맞춤 설정하는 유일한 해결책입니까?

+2

모든 체크 박스에 대해 원하는 경우 룩앤필을 변경하십시오. 마우스 클릭을 사용하지 않으려면 위에 투명한 구성 요소를 추가 할 수도 있습니다. 포커스를받지 못하게하거나 사용자가 키보드를 사용하여이를 확인할 수도 있습니다. – mihi

+0

이것은 UI 프레임 워크의 일반적인 문제입니다. 비활성화 된 (읽기 전용) 상태는 읽기가 쉽지 않습니다. 나는 이것을 다루기 위해 다른 사람들이하는 것에 관심이있다. –

+2

다른 UI 요소 (가능한 경우 텍스트가 변경되는 JLabel 등)를 사용하십시오. 확인란은 사용성 측면에서 "예약 된 요소"입니다. 설정을 변경하는 데 사용할 수없는 표시기로 확인란을 사용하는 것은 #define을 사용하여 C를 다른 언어처럼 보이게 만드는 것과 유사합니다. 물론 합법적인데 왜 사용자가 그 고통을 겪게됩니까? – jprete

답변

5

JCheckBox의 하위 클래스를 만들고 processMouseEvent/processKeyEvent를 재정 의하여 아무것도 수행하지 않을 수 있습니다.

public class ReadOnlyCheckBox extends JCheckBox { 
    public ReadOnlyCheckBox (String text, boolean selected) { 
     super(text,selected); 
    } 

    protected void processKeyEvent(KeyEvent e) { 
    } 

    protected void processMouseEvent(MouseEvent e) { 

    } 
} 
+0

+1 매우 유용한 솔루션입니다. – Arvanem

2

JCheckBox을 확장하면 setEnabled 메서드를 재정의하고 을 JCheckBox을 매개 변수로 사용하는 코드로 전달할 수 있습니다. ButtonModel을 구현할 때와 마찬가지로 체크 박스에서 다른 모든 항목을 다시 구현하지 않아도됩니다.

나는 당신이 체크 박스를 사용하고있을 때 약간 혼란 스럽다. - 활성화되어 있지 않지만 다른 매개 변수를 기반으로 체크가 나타나기를 원하는가? 이 경우 입력 요소를 사용해야하는 이유는 무엇입니까? 장애인 JCheckBox에 텍스트의 색상을 변경

+0

혼란을 없애기 위해 - JCheckBox의 모양은 설정이 설정되었는지 여부를 나타내는 데 유용하고 명확합니다. 예, 입력 요소이지만 아이디어는 입력을 비활성화하는 것입니다. – Arvanem

+0

이 확인란이 클릭에 응답하지 않는다는 것을 명확하게 나타내지 않으면 사용자 혼란으로 문제가 발생할 수 있습니다. 대신 어떤 종류의 활성화/비활성화 아이콘을 사용할 수없는 이유는 무엇입니까? –