각 리스너를 작성하지 않고 특정 행에서 필드가 변경되었는지 확인하는 방법이 있습니까?

Wt Riker

사용자가 필드 행을 동적으로 추가 할 수있는 대화 상자가 있습니다. 각 행은 8 개의 필드 (콤보 상자 및 서식있는 텍스트 필드)와 클릭하면 빈 필드의 새 행을 추가하는 버튼으로 구성됩니다. 특정 행의 필드가 수정되었는지 쉽게 감지 할 수있는 방법이 있습니까? 각 행의 모든 ​​필드에 대해 리스너를 만들 필요는 없지만 다른 방법은 없습니다. 그것이 유일한 방법이라면 내가 너무 많은 청취자들과 충돌 할 수있는 한계가 있습니까? TIA.

캘리포니아

컨트롤의 내용이 변경되었는지 확인하려면 리스너를 추가해야합니다. 기간.

사용하는 각 구성 요소를 자체 이벤트를 구현하거나 (하지만 항상 "ContentChanged"와 같은 동일한 이벤트) 사용자 정의 구성 요소로 확장하거나 내용 변경. 처럼

protected void textChanged( String changedText ) {
    // Collect all changes here
}

JTextField textField = new MyTextField( text -> textChanged( text ) );

private class MyTextField extends JTextField {
    private final Consumer<String> textChangedConsumer;

    public MyTextField( Consumer<String> textChangedConsumer ) {
        super();
        this.textChangedConsumer = textChangedConsumer;

        getDocument().addDocumentListener( new DocumentListener() {

            @Override
            public void removeUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }

            @Override
            public void insertUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }

            @Override
            public void changedUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }
        } );
    }
}

텍스트 필드가 필요할 때마다이 클래스를 사용하고 변경 사항을 수집하는 하나의 일반적인 방법이 있습니다. JComboBoxes 등에 대해서도 동일하게 수행하십시오. 모두 textChanged 메서드를 가리 키도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관