Portanto gostaria da ajuda de vocês em uma solução de problema… Quero em meu JInternalFrame trazer todos os Componentes e verificá-los para saber se o mesmo é um JTextField ou JPasswordField (depois irei expandir para os demais componentes de texto) para poder desabilitá-los, sendo que nem sempre saberei quais campos terei na tela. Consegui fazer uma comparação pelo setName() do componente, porém eu acho que o método está me retornando os containers JPanels que estão dentro do meu JIF.
Aí está o código do que estou sonhando em fazer…
privatevoidlimpaCampos(JInternalFramejiFrame){
ComponentcomponentTeste[]=jiFrame.getComponents(); StringnomeTeste="";for(ComponentcompLoop:componentTeste){
nomeTeste=compLoop.getName(); // Somente pra ver se está trazendo o nome...System.out.println(nomeTeste);if(nomeTeste.substring(0,1).equals("tf")||nomeTeste.substring(0,1).equals("pf")){
compLoop.setEnabled(false);}
}
Pois bem… está retornando [null null]
Minha hierarquia de componentes está assim:
JScroolBar
JTable
JPanel
JButtons CRUD
JPanel
JTextFields e JPasswordFields que são meus campos
JPanel
JButtons - Cancelar e Salvar
Acho que o getComponents() está me retornando um Array só com os dois Panels… Será ???
Portanto gostaria da ajuda de vocês em uma solução de problema… Quero em meu JInternalFrame trazer todos os Componentes e verificá-los para saber se o mesmo é um JTextField ou JPasswordField (depois irei expandir para os demais componentes de texto) para poder desabilitá-los, sendo que nem sempre saberei quais campos terei na tela. Consegui fazer uma comparação pelo setName() do componente, porém eu acho que o método está me retornando os containers JPanels que estão dentro do meu JIF.
Aí está o código do que estou sonhando em fazer…
privatevoidlimpaCampos(JInternalFramejiFrame){
ComponentcomponentTeste[]=jiFrame.getComponents(); StringnomeTeste="";for(ComponentcompLoop:componentTeste){
nomeTeste=compLoop.getName(); // Somente pra ver se está trazendo o nome...System.out.println(nomeTeste);if(nomeTeste.substring(0,1).equals("tf")||nomeTeste.substring(0,1).equals("pf")){
compLoop.setEnabled(false);}
}
Pois bem… está retornando [null null]
Minha hierarquia de componentes está assim:
JScroolBar
JTable
JPanel
JButtons CRUD
JPanel
JTextFields e JPasswordFields que são meus campos
JPanel
JButtons - Cancelar e Salvar
Acho que o getComponents() está me retornando um Array só com os dois Panels… Será ???
Falows ;)
meu primeiro post no guj XD
cara talvez nao tenha nada a ver mais seu "nomeTeste.substring(0, 1).equals(“pf”)) " nunca vai ser true pq a sbustring de 0,1 soh retorna 1 caracter se tu queres os 2 priemiros carcteres terias que usar .substring(0,2)
adriano_si
Pensei que o segundo parametro do método fosse pra controlar até qual caractere que a String teria qu retornar…
Porém não é esse o erro não… tá dando um NullPointerException aquiif(nomeTeste.substring(0, 1).equals("tf") || nomeTeste.substring(0, 1).equals("pf"))
Mas valew… vou continuar tentando… 8)
T
thingol
nomeTeste = compLoop.getName()
Isso só funciona se você, ao criar o componente, atribuiu-lhe um nome com “setName” (veja seu método “initComponents” ou outro que cria os componentes. Como você provavelmente não chamou “setName” isso nunca vai funcionar.
Em vez disso, é melhor ver se a classe do componente é JTextField ou JPasswordField. Nesse caso, você tem de usar “instanceof”.
Como um JPasswordField extends JTextField, então você primeiramente testa se “compLoop instanceof JPasswordField”, e depois testa se “compLoop instanceof JTextField”. OK?
Conselho: não dependa demais de nomes e strings. Obter o nome de um objeto em tempo de execução, achando que é o mesmo nome da variável, não funciona. Nem é muito legal usar “reflection” nesse caso (muita gente nem pensa e já vai logo recomendando reflection, como se fosse um remédio para todos os males). Nesse seu caso um “instanceof” já resolve, e muito bem.
adriano_si
Valeu thingol… na verdade o setName eu usei sim… uso o NetBeans e setei o name dos componentes… mas era justamente o instanceof que eu estava atrás… Só preciso lembrar da sintaxe… mas valeu cara… porém ainda tenho certeza que o getComponents() está retornando os JPanels que adicionei… pois no teste no System.out.println() ele está me retornando null null
Falows
adriano_si
Só mais uma pergunta… o instanceof não vai comparar um Component a um JTextField ?? logo não será sempre false ??
Valews
adriano_si
É isso mesmo… fiz esse teste e comprovei…
private void limpaCampos(JInternalFrame jiFrame) {
Component componentTeste[] = jiFrame.getComponents();
for(int i = 0; i < componentTeste.length; i++) {
Class c = componentTeste.getClass();
JOptionPane.showMessageDialog(null, c);
if(componentTeste[i] instanceof JTextField) {
JOptionPane.showMessageDialog(null, "Aqui");
componentTeste[i].setEnabled(false);
}
}
}
Caraca… agora é que foi… como faço isso ??? hehehehehe