2013-09-07 3 views
0

JButton 이벤트를 배우려고 노력하는 동안 문제 때문에 혼란스러워집니다. 내가 사용하는 샘플 코드는 here입니다. Java Swing 문제인데 왜 changeEvent가 jButton을 사용하여 추가 이벤트를 발생시키고 있습니까?

코드

은 다음과 같습니다 :

jb.addChangeListener(new ChangeListener() 
{ 
    @Override 
    public void stateChanged(ChangeEvent e) 
    { 
     System.out.println("Changed"); 
    } 
}); 

이 단 하나의 버튼을 사용하므로 데모 응용 프로그램과 응용 프로그램이 시작 될 때 포커스가 있습니다. 간단히 스페이스 바를 눌러 클릭 이벤트를 시뮬레이트합니다. 튜토리얼 (OReilly : Java Swing)에 따라 변경 이벤트를 두 번 실행 한 다음 작업 이벤트와 작업 이벤트를 차례로 실행해야합니다. 즉

  1. 의 ActionEvent
  2. 을 변경 변경 변경

그러나 4 이벤트 후 나는 또 다른 ChangeEvent 수있어. 위에서 언급 한 방식으로 한 번의 클릭으로 실제로 5 개의 이벤트가 있습니다. 마우스로 클릭하려고하면 결과가 훨씬 다릅니다. 마우스가 버튼 영역에 입력되면 이벤트가 시작됩니다.

마우스가 JButton을 가리키면 어떤 변경이 발생하고 ChangeEvent가 발생하는지 알 수 없습니다. JButton에 대한 getChangedState (ItemStageChanged)와 같은 메서드가 없으므로 해당 단추가 어떤 상태로 변경되었는지 알 수 없습니다. 학습에 관한 것이므로이 문제를 이해하지 못한다면 ActionListener를 사용하고 싶지 않습니다.

그래서 내 질문은 : 그것은 하나가 있어야 할 곳에

  1. 는 왜 두 번 ChangeEvent를 볼 수 있습니까?
  2. JButton에서 어떤 상태가 변경되었는지 어떻게 알 수 있습니까?

편집 : DefaultButtonModel에는 5 가지 상태가 있으며 ButtonModel 인터페이스에 정의되어 있습니다. 그러나 JButton에는 해당 상태를 가져 오는 필드, 메서드가 없습니다. 그들이 기꺼이 무시 당했습니까? 또는 JButton (및 AbstractButton)은 ButtonModel 인터페이스와 관련이 없습니다.

편집 2 : 튜토리얼이 표시,

하는 L & F에 따라도 추가의 ChangeEvent가있을 수 있습니다.

Windows에서 스윙의 기본 L & F를 사용하고 있지만 튜토리얼의 예상과 다른 결과가 나옵니다.

+2

'JButton '사용법이나'ChangeListener' 사용 방법을 배우고 싶습니까? 자바를 코딩 할 때마다 버튼에 ChangeListener를 추가하는 이유를 찾지 못했기 때문에 나는 묻는다. 'ActionListener'는 갈 수있는 일반적인 방법입니다 .. –

+0

JButton 장을 배우는 동안, 저는 이걸 가지고 있습니다. 그러나 ** 많이 사용하지 않더라도 그것을 무시하고 싶지는 않습니다 **. – Jones

+1

Andrew와 (과) 일치합니다. 어쨌든 [Listener 작성 방법] (http://docs.oracle.com/javase/tutorial/uiswing/events/handling.html)에서 설명/예제를위한 스윙 튜토리얼부터 시작하겠습니다. 귀하의 경우에는 버튼을 선택하면 하나의 이벤트가 선택 취소되고 선택되지 않은 이벤트는 하나가됩니다. – camickr

답변

2

버튼을 누르면 순서대로 일어날 다섯 가지 이벤트는 다음과 같습니다 ChangeEvent를 : 무장 - 사실 ChangeEvent를 : 프레스 - 진정한 의 ActionEvent를 ChangeEvent를 : 프레스 - 거짓 ChangeEvent를 : 무장 - 거짓

하는 경우 마우스를 사용하여 버튼을 누른 다음 위의 내용 외에도 롤오버에 대한 ChangeEvent가 있습니다. 마우스가 버튼 위로 이동하면 true이고, 마우스가 버튼에서 멀어 질 때 롤러가됩니다.