Pergunta

Para inicializar todos os JTextfFields em um JPanel quando os usuários clicar em um botão "Limpar", eu preciso percorrer o JPanel (em vez de definir todos os campos indivíduo a "").

Como posso usar um para-cada circuito para percorrer os JPanel em busca de JTextFields?

Foi útil?

Solução

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

Mas se você tem JTextFields mais profundamente aninhados, você poderia usar a seguinte forma recursiva:

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

Editar: Um exemplo para Tom Hawtin - tackline sugestão seria a de ter a lista em sua classe quadro:

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

e quando você inicializar os campos de texto individuais, adicioná-los a esta lista:

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

e quando o usuário clica no botão Limpar, assim:

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

Outras dicas

Enquanto outra resposta mostra uma forma direta de resolver o seu problema, sua pergunta é o que implica uma má solução.

Geralmente quer dependências estáticas entre camadas para ser um caminho. Você deve precisar de ir um pacote através getCommponents. Casting (assumindo que os genéricos) é uma maneira fácil de ver que alguma coisa tem de errado embora.

Assim, quando você criar os campos de texto para um formulário, adicioná-los à lista a ser apuradas em uma operação de limpeza, bem como adicioná-los ao painel. Claro que no código real lá provavelmente outras coisas que você quer fazer para eles também. No código real, você provavelmente vai querer estar lidando com modelos (possivelmente Document) ao invés de JComponents.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top