Existe como eu saber a quantidade de componentes inseridos dentro de um Jframe, e assim, percorrer cada um deles identificando seu tipo e alterando certas propriedades ?
Exemplo : Preciso criar um método que limpe todas as JTextfields contidas em um JFrame, e é um método que deve ser genérico para todas as janelas criadas. Faço isto no Delphi e tenho certeza que o Java também deverá permitir. ( Isto economiza umas boas linhas de programação )
É algo recursivo, já que um JFrame é um java.awt.Container, que tem um método Component[] getComponents. Mas ele não dá todos os JTextFields porque eles normalmente estão associados a um JPanel que é um Component, e assim por diante.
Obrigado pela resposta senhores !!!
Estou muito feliz com a recepção que o mundo Java tem me dado e cada vez mais estou me apaixonando por esta linguagem!
package util;
import java.awt.Component;
import javax.swing.JTextField;
public class JFrameUtils {
public static void cleanJTextFields(Component[] components) {
for (Component c : components) {
if (c instanceof JTextField) {
((JTextField) c).setText("");
}
}
}
}
[/quote]
Pra fechar com o que o thingol colocou, só precisa checar, quando c não for um JTextField, se ele é um container, e processar seus filhos.
Acho que a forma mais simples, pra não ter que colocar vários instanceOf xxxx é fazer uma chamada recursiva:
public static void cleanJTextFields(Component[] components) {
for (Component c : components) {
if (c instanceof JTextField) {
((JTextField) c).setText("");
} else {
if (0 < c.getComponentCount()) {
cleanJTextFields(c.getComponents());
}
}
}
}
O problema é que um JTextField também é um container (estende JComponent, que estende Container). O mais correto, pra ficar genérico, era não ter o else que coloquei, e sempre checar o número de componentes abaixo do objeto c.
Isso tudo depende de como vc estruturou suas telas. Se souber exatamente quais containers são usados, pode jogar um instanceOf mesmo…
Ah, um try/catch com o novo if dentro, ou então um
if (c instanceOf Container) antes da contagem de componentes filho ajuda
Senhores, desculpem minha ignorância mas, tenho estudado e visto exemplos do uso de FOR e a sintaxe e o funcionamento que vcs aplicam aqui é diferente do que tenho visto.
Quando vcs colocam no exemplo :
for (Component c : components) {
.......
}
quer dizer que ele vai realizar um loop do primeiro ao último elemento deste “vetor” de componentes ?
[quote=Kebe]Senhores, desculpem minha ignorância mas, tenho estudado e visto exemplos do uso de FOR e a sintaxe e o funcionamento que vcs aplicam aqui é diferente do que tenho visto.
[/quote]
Kebe, essa sintaxe que você está vendo foi introduzida no Java 5, pra facilitar a codificação. E sim, faz exatamente isso que você disse