2011-08-25 6 views
1

나는 일련의 업로드 행을 표시하는 JTable을 가진 업 로더 프로그램을 가지고 있습니다. "Completed Completed"라는 JButton이 있습니다. 클릭하면 완성 된 업로드 행이 제거됩니다. 이제 JCheckBox/JButton 조합 (예 : gmail의 체크 박스/드롭 다운 조합)을 사용하여 확인란을 선택하면 행이 자동으로 제거됩니다.Java의 JButton에서 JCheckBox를 사용할 수 있습니까?

나는 JButton을 확장하고 생성자를 오버라이드하여 JCheckBox를 추가하는 클래스를 만들었습니다. JCheckBox와 JButton의 ActionListener가 추가되었습니다. 이 모양입니다.

http://i.stack.imgur.com/KcBHv.png

모든 것이 완벽하게 작동합니다. 그러나 나는 그것을 사용할지 안할 지 딜레마에 빠져 있습니다. JButton API를 의도 한 용도로 사용하지 않았기 때문에 모든 Java 응용 프로그램에서 그런 제어 기능을 본 적이 없으므로 사용자에게 문제가 될지 걱정됩니다.

런타임 중에 UI가 깨지는 것과 같은 문제가 발생합니까? 또는 모든 OS에서 작동하지 않을 수도 있습니까? (저는 Windows7을 사용하고 있습니다)

아니면 좋은 설계 방법이 아닙니까? ("사용자는 놀라지 않을 것"이라는 규칙을 이해합니다. 해당 확인란에 대한 툴팁도 포함 시켰습니다.)

의견을 말하십시오. 감사합니다.

답변

3

윌이 원인 문제

아마. 예를 들어 네이티브 위젯을 사용하여 버튼을 렌더링하면 렌더링 문제가 발생할 수 있습니다. 또는 버튼이 이벤트를 삼켜 버리므로 확인란이 클릭에 응답하지 않을 수 있습니다.

좋은 설계 방식입니까?

아니요. 대부분의 사용자는 이전에 버튼 내부에서 체크 박스를 본 적이 없으므로 레이아웃에 버그가 있다고 생각할 것입니다. 모든 렌더링 문제 (버튼을 누를 때 체크 상자가 어떻게 보이나요? 이상한 색상으로 사라지거나 사라지나요?)와 함께이 문제를 피해야한다고 생각합니다.

표준 접근법을 사용하십시오 : 버튼 위에 텍스트 ("자동으로 지우기")가있는 확인란. 체크 박스가 "닫기"로 선택되면 버튼 텍스트를 변경하십시오.

+0

감사합니다. 나는 별도의 프레임이나 탭에있는 '설정'항목과 함께 확인란을 사용할 계획입니다. – Vigneshwaran

2

런타임 중에 UI가 깨지는 것과 같은 문제가 발생합니까? 아니면 가능합니까? 모든 OS에서 작동하지 않을 수 있습니까? (저는 Windows7을 사용하고 있습니다)

나는 이것이 문제가되지 않을 것이라고 생각합니다.

아니면 좋은 설계 방식이 아닌가요? 내가 생각하는 개인적

(나는 또한 그 체크 박스에 대한 툴팁을 포함 시켰습니다. 규칙 .. 나는 그들이 이해할 수있을 것 같아요 "사용자를 놀라게해서는 안된다") 그하는 JButton의 왼쪽에있는 체크 박스를 넣는 것 더 분명해. 어쨌든 그것은 당신에게 달렸습니다. 또한 빠른 동작을 수행하면 사용자가 확인란을 클릭하지 않고 버튼을 클릭 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. – Vigneshwaran

0

혹시이 작업을 수행하는 방법을 궁금해하는 사람이있을 것입니다. 크기와 비슷한 크기를 유지하려면 EmptyBorder (4,4,4,4)를 추가해야 할 것입니다. 나는 보통 다른 버튼과 함께 그리드 레이아웃으로 래핑합니다.

  new JCheckBox() { 
      JButton button = new JButton(); 
      { 
       button.setModel(getModel()); 
      } 

      @Override 
      protected void paintComponent(Graphics g) { 
       if (!button.getSize().equals(getSize())) { 
        button.setSize(getSize()); 
       } 

       button.paint(g); 
       super.paintComponent(g); 
      } 

      @Override 
      public void setEnabled(boolean b) { 
       super.setEnabled(b); 
       button.setEnabled(b); 
      } 
     };