2012-09-12 1 views
3

OS X Mountain Lion에서 Java 응용 프로그램을 개발하고 실행하고 있으며 사용자 정의 대화 상자에 "예"및 "아니오"옵션을 추가했습니다. 그러나 Windows 7에서 응용 프로그램을 실행하면 "예"및 "아니오"옵션이 취소되었음을 알았습니다. 이 UI 결함을 수정하려면 다음 코드를 추가하십시오.JOptionPane에서 옵션이 반대로 된 이유는 무엇입니까?

String msg = "Are you sure you want to cancel the selected bookings?"; 
    String[] options = new String[] { "Yes", "No" }; 
    int noOption = 1; 
    String os = System.getProperty("os.name").toLowerCase(); 
    if ("mac os x".equals(os)) { 
     options = new String[] { "No", "Yes" }; 
     noOption = 0; 
    } 

    int option = 
     JOptionPane.showOptionDialog(null, msg, "Confirm Unbooking", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, 
      options[noOption]); 
    if (option == noOption) { 
     return; 
    } 

내가 처음에 설명한 문제가 왜 발생했는지 누군가가 알 수 있습니까? 응용 프로그램의 L & F와 관련이 있다는 느낌이 들었습니다. 감사!

+1

시퀀스를 사용하지 마십시오. LAF가 플랫폼 ux 가이드 라인을 준수하는 작업을 수행하게되어 기쁩니다 :-) – kleopatra

+0

감사합니다! 'JOptionPane'을 사용할 때만 프레임을 만들고 내 단추를 넣을 때이 동작을 보지 못했습니다. 다른 플랫폼에서 응용 프로그램을 테스트하는 것은 이번이 처음이므로이 문제가 발생하는 것을보고 놀랐습니다. –

+1

사용자 정의 프레임/대화 상자의 버튼을 플랫폼 호환으로 만드는 것을 고려해 볼 수 있습니다 :-) OptionPaneUI의 내부가 충분히 재사용 할 수 있는지 (아마도 없을지라도) 기억하지만, 오버 (fi MigLayout, FormLayout) – kleopatra

답변

10

이 기능을 수행하는 것은 실제로 L & F 기능입니다 (UI 글리치가 아닙니다). 더 나은 사용자 경험을 위해이를 변경하지 않을 것을 권장합니다. 사용자는 애플리케이션이 플랫폼에서 일관성이있을 것으로 기대합니다. Windows & 리눅스는 버튼이 왼쪽에서 오른쪽으로 표시되는 데 사용되고 MacOS는 버튼이 오른쪽에서 왼쪽으로 표시되는 데 사용됩니다.

여기에 두 샘플을 참조하십시오 :

윈도우 :

enter image description here

맥 OS :

enter image description here

보기 맥 OS에서 가장 중요한 버튼이 오른쪽에 표시되는 방법 반면 Windows에서는 그 반대입니다.

관련 문제