JButton 이벤트를 배우려고 노력하는 동안 문제 때문에 혼란스러워집니다. 내가 사용하는 샘플 코드는 here입니다. Java Swing 문제인데 왜 changeEvent가 jButton을 사용하여 추가 이벤트를 발생시키고 있습니까?
코드
은 다음과 같습니다 :jb.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent e)
{
System.out.println("Changed");
}
});
이 단 하나의 버튼을 사용하므로 데모 응용 프로그램과 응용 프로그램이 시작 될 때 포커스가 있습니다. 간단히 스페이스 바를 눌러 클릭 이벤트를 시뮬레이트합니다. 튜토리얼 (OReilly : Java Swing)에 따라 변경 이벤트를 두 번 실행 한 다음 작업 이벤트와 작업 이벤트를 차례로 실행해야합니다. 즉
- 는
- 는
- 의 ActionEvent
- 을 변경 변경 변경
그러나 4 이벤트 후 나는 또 다른 ChangeEvent 수있어. 위에서 언급 한 방식으로 한 번의 클릭으로 실제로 5 개의 이벤트가 있습니다. 마우스로 클릭하려고하면 결과가 훨씬 다릅니다. 마우스가 버튼 영역에 입력되면 이벤트가 시작됩니다.
마우스가 JButton을 가리키면 어떤 변경이 발생하고 ChangeEvent가 발생하는지 알 수 없습니다. JButton에 대한 getChangedState (ItemStageChanged)와 같은 메서드가 없으므로 해당 단추가 어떤 상태로 변경되었는지 알 수 없습니다. 학습에 관한 것이므로이 문제를 이해하지 못한다면 ActionListener를 사용하고 싶지 않습니다.
그래서 내 질문은 : 그것은 하나가 있어야 할 곳에
- 는 왜 두 번 ChangeEvent를 볼 수 있습니까?
- JButton에서 어떤 상태가 변경되었는지 어떻게 알 수 있습니까?
편집 : DefaultButtonModel에는 5 가지 상태가 있으며 ButtonModel 인터페이스에 정의되어 있습니다. 그러나 JButton에는 해당 상태를 가져 오는 필드, 메서드가 없습니다. 그들이 기꺼이 무시 당했습니까? 또는 JButton (및 AbstractButton)은 ButtonModel 인터페이스와 관련이 없습니다.
편집 2 : 튜토리얼이 표시,
하는 L & F에 따라도 추가의 ChangeEvent가있을 수 있습니다.
Windows에서 스윙의 기본 L & F를 사용하고 있지만 튜토리얼의 예상과 다른 결과가 나옵니다.
'JButton '사용법이나'ChangeListener' 사용 방법을 배우고 싶습니까? 자바를 코딩 할 때마다 버튼에 ChangeListener를 추가하는 이유를 찾지 못했기 때문에 나는 묻는다. 'ActionListener'는 갈 수있는 일반적인 방법입니다 .. –
JButton 장을 배우는 동안, 저는 이걸 가지고 있습니다. 그러나 ** 많이 사용하지 않더라도 그것을 무시하고 싶지는 않습니다 **. – Jones
Andrew와 (과) 일치합니다. 어쨌든 [Listener 작성 방법] (http://docs.oracle.com/javase/tutorial/uiswing/events/handling.html)에서 설명/예제를위한 스윙 튜토리얼부터 시작하겠습니다. 귀하의 경우에는 버튼을 선택하면 하나의 이벤트가 선택 취소되고 선택되지 않은 이벤트는 하나가됩니다. – camickr