2012-06-21 3 views
0

그래서 여기에 제가하려는 일이 있습니다. 사용자가 JComboBox1에서 항목을 선택하면 JComboBox2을 사용 중지 할 수 있기를 원합니다. 그러나 그들이 "Unavailable"을 선택한 경우에만. 내가 action listeners에 대해 물건을 읽고 등등, 그러나 저는 if 문처럼 사용하기위한 단지 방법이있다 :다른 ComboBox의 항목을 기반으로하는 JComboBox를 비활성화하십시오.

if (jComboBox1.getSelectedItem().equals("Unavailable") == true) { 
     jComboBox2.setEnabled(false); 
} 

답변

1

확실히 작동합니다,하지만 당신은해야 할 것 : 여기 내가 무슨 생각입니다 그 코드를 주기적으로 호출하십시오. ActionListener를 사용하는 것이 훨씬 더 좋을 것입니다 - 앞으로는 확실히 도움이 될 것입니다. 당신은 첫 번째 JComboBox에에 ActionListener를 첨부해야한다,이를 위해

//This class should be a private class inside the class which holds the JComboBoxes. 
private class DisableActionListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     JComboBox cb = (JComboBox)e.getSource(); 
     if (cb.getSelectedItem().equals("Unavailable")) { 
      jComboBox2.setEnabled(false); 
     } 
    } 
} 

같은

가 작동하려면 ActionListener를 구현하는 클래스를 만들어야합니다 -의 ActionListener는 그 자체로 좋은입니다! 이렇게하려면 JComboBox에서 addActionListener() 메서드를 사용하고 새로 만든 클래스의 인스턴스를 추가합니다. 우리는 구현 ActionListener 인터페이스 클래스를 만들고, 여기에

private class DisableActionListener implements ActionListener 

: 이제

는 코드를 해부한다. 이것으로, 우리는 우리 자신의 ActionListener 모델을 만들고 있습니다. 인터페이스를 구현할 때는 인터페이스의 모든 메서드를 재정의해야하므로 인터페이스의 표준 actionPerformed (ActionEvent e) 메서드를 재정의해야합니다. 이 메소드는, 항목을 선택 또는 선택 해제 할 때마다 불려갑니다 (ActionEvent가 dispatch됩니다). 그러므로, 당신은 당신이이 방법 안에서 일어날 일의 논리를 넣어야 만합니다.

JComboBox cb = (JComboBox)e.getSource(); 

actionPerformed() 메서드를 호출하게하는 모든 ActionEvent에는 추가 데이터가 포함됩니다. 데이터 조각 중 하나가 ActionEvent 소스입니다.이 작업을 수행하게 된 원인은 무엇입니까? 이 경우, 우리는 ActionListener를 JComboBox에 붙 였기 때문에 소스가 JComboBox라는 것을 알기 때문에, 이벤트 인 JComboBox에 ActionEvent의 소스 (Object)를 캐스트 할 수 있습니다. 문자열에 당신은

(jComboBox1.getSelectedItem().equals("Unavailable") == true), 

을 썼다

하지만 등호() 메소드를 이미 true를 반환하므로 (=

나머지는 고정 구문 오류와 사용자가 직접 쓴 경우 논리이며, = true) 부분은 불필요한 중복입니다. 귀하의 경우, 당신은 기본적으로 (사실 == 사실).

어쨌든이 도움이 되길 바랍니다.

관련 문제