2016-10-28 2 views
0

현재이 코드 부분을 사용자가 어떤 버튼을 자기가 선택한 버튼과 비교할 것인지를 결정하려고합니다. 현재 Test2라는 else가 자동으로 표시됩니다.JOptionPane이 선택된 버튼을 검색하려고합니다.

Object usersChoice; 

    Object[] options = { "Go on a journey!", "Exit, i'm tired." }; 
    usersChoice = JOptionPane.showOptionDialog(null, "Hello Melissa :)", "Sunshine program", 
    JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, 
    null, options, options[0]); 

    if(usersChoice == options) 
    { 
     JOptionPane.showMessageDialog(null, "Test1"); 
    } else { 
     JOptionPane.showMessageDialog(null, "Test2"); 
    } 
+0

의도 한 행동은 무엇입니까? – Thunderforge

+0

if else에서 거기에 두 개의 함수를 넣으 려하지만, 간단히 테스트 할 두 개의 경계를 썼습니다. 사용자가 "여행하기"버튼을 선택할 때 그렇게하기를 원합니다. 그것은 if 문으로 들어가고, 그렇지 않으면 "Exit, i 'm tired"가됩니다. – Danny

답변

3

문제는이 코드 (내가 선명도 usersChoice의 선언을 이동 한) 함께 :

Object[] options = [...] 
Object usersChoice = JOptionPane.showOptionDialog([...]) 

int를 돌려 JOptionPane.showOptionDialog() 방법. 그것이 프리미티브이기 때문에, 그것은 자동으로 Integer에 도착하게됩니다.

if(usersChoice == options) 

당신은 (더 구체적으로 Integer을)를 Object[]Object에 비교됩니다

이제이 코드가 있습니다. 그것들은 다른 유형이기 때문에 항상 거짓이 될 것입니다.

또한 Java에서 ==을 사용하면 프리미티브에 대한 동일성을 확인하지만이 방법으로 비교하면 Object가 메모리 위치와 비교됩니다. 대신 .equals()을 사용하여 Object을 비교하십시오.

관련 문제