문제

모든 것을 초기화하기 위해 JTextfFielda a JPanel 사용자가 "클리어 버튼"을 클릭하면 JPanel (모든 개별 필드를 ""로 설정하는 대신).

Seach Loop을 사용하여 어떻게 JPanel 찾아 JTextField에스?

도움이 되었습니까?

해결책

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

그러나 jtextfields가 더 깊이 중첩 된 경우 다음과 같은 재귀 양식을 사용할 수 있습니다.

void clearTextFields(Container container) {
    for (Component c : container.getComponents()) {
        if (c instanceof JTextField) {
           ((JTextField)c).setText("");
        } else
        if (c instanceof Container) {
           clearTextFields((Container)c);
        }
    }
}

편집하다: 샘플 Tom Hawtin- 태클 라인 제안은 프레임 클래스에 목록을 작성하는 것입니다.

List<JTextField> fieldsToClear = new LinkedList<JTextField>();

개별 텍스트 필드를 초기화하면이 목록에 추가하십시오.

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }

사용자가 클리어 버튼을 클릭하면 다음과 같습니다.

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}

다른 팁

또 다른 답변은 문제를 해결하는 직접적인 방법을 보여 주지만, 귀하의 질문은 불량한 해결책을 암시합니다.

일반적으로 레이어 간의 정적 종속성이 한 가지 방법이되기를 원합니다. 팩을 가야합니다 getCommponents. 캐스팅 (제네릭을 가정)은 무언가 잘못되었음을 쉽게 알 수있는 방법입니다.

따라서 양식의 텍스트 필드를 만들 때 명확한 작업에서 클리어를 지우고 패널에 추가 할 목록에 추가하십시오. 물론 실제 코드에는 아마도 당신이 그들에게하고 싶은 다른 일이있을 것입니다. 실제 코드에서는 아마도 모델을 다루고 싶을 것입니다 (아마도 Document)보다는 JComponent에스.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top