스윙 응용 프로그램에서 하나의 서브 패널을 가지고 있으며 각각 JSlider
을 수신합니다. 주변의 부모 패널은 모든 하위 패널도 수신합니다. 아래 예제에서 일관된 결과를 얻으려면 부모를 먼저 추가하고 , 로컬 수신기를 추가해야했습니다. 이는 EventListenerList
에 명시된 주문과 article에 설명 된대로 이해가됩니다. 그 명령에 의지 할 수 있습니까? 아니면 다른 이벤트를 보내야합니까?EventListenerList 발생 순서
class SubPanel extends JPanel implements ChangeListener {
private final JSlider slider = new JSlider();
private final JLabel label = new JLabel();
private final String name;
private float value;
public SubPanel(String name, float value, ChangeListener parent) {
this.name = name;
this.value = value;
...
slider.addChangeListener(parent);
slider.addChangeListener(this);
}
...
}
부록은 : EventListenerList
의 논의는 구현 조언보다는 보장 것으로 보인다. pstanton에 의해 제안 된 연결 방식은 정확한 순서를보다 확실하게 시행합니다. 예를 들어, SubPanel
의 ChangeListener
은 단순히 이벤트를 상위로 전달할 수 있습니다. JSlider에와 JComponent의 등의 문서가 청취자 통지의 순서를 언급하지 않기 때문에
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
흥미로운 질문과 답변! 1+ –
['Converter'] (http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html) 응용 프로그램에는'ConverterRangeModel'의 예제가 포함되어 있습니다. – trashgod
'googling'하는 동안 나는 방금 게시물을 얻었고, 자세히 설명하고 싶었다. 게시물 개수를 확인해 주시고 제가 설명한 바가 잘못 될 수 있다면 저를 지적하십시오! – Sage