JPANEL을 통한 루프
-
10-07-2019 - |
문제
모든 것을 초기화하기 위해 JTextfField
a 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
에스.
제휴하지 않습니다 StackOverflow