Um Unico Método Para Varios Objetos!

Boa noite pessoal!

Estou com um problema porem creio que seja de facil resolução!

É meio crandinho o texto que vou colocar, espero que isso nao desanime a lerem! Preciso mesmo dessa ajuda!

Bom vamos lá:

Eu tenho varios JTextField no meu formulario e, gostaria de fazer o seguinte:

Toda vez que o mouse ficasse sobre o jTNome por exemplo, a borda dele mudasse pra vermelha, quando o mouse saisse dele, a borda voltasse pra cor original!

Bom ate ai eu ja fiz… consegui setar os atributos e beleza, as bordas ficam nas cores desejadas! Utilizei os eventos mouseEntered e mouseExited:


private void jTNomeMouseEntered(java.awt.event.MouseEvent evt) {                                        
        // TODO add your handling code here:
       jTNome.setBorder(new LineBorder(new Color(255, 0, 0)));
}

private void jTNomeMouseExited(java.awt.event.MouseEvent evt) {                                       
        // TODO add your handling code here:
        jTNome.setBorder(new LineBorder(new Color(180, 180, 180)));
}

Mais oque eu queria é: criar um metodo BordaMouseDentro e BordaMouseFora por que, essa mudança de cor nas bordas vao ser aplicadas a todos os JTextField do meu formulario (tenho por volta de 55). Criar o metodo eu fiz… normal:


private void BordarMouseDentro() {
       jTNome.setBorder(new LineBorder(new Color(255, 0, 0)));      
}

private void BordaMouseFora() {
        jTNome.setBorder(new LineBorder(new Color(180, 180, 180)));
}

E ao inves de atribuir essas propriedades direto no evento, eu chamo o metodo e ele faz isso pra mim.

Mais como posso fazer para chamar esse metodo nos meus outros campos JTextField tambem?

Pra nao dizer que noa tentei, fiz algo do tipo:

Onde eu chamo o evendo eu fiz:

BordaMouseDentro(jTNome.getName());

ai no metodo eu fiz:


private void BordarMouseDentro(String Campo) {
       Campo.setBorder(new LineBorder(new Color(255, 0, 0)));      
}

Mais ai é que vem o erro, a propriedade “setBorder” tem que ser atribuida a um JTextField e nao a um objeto String. Como posso fazer pra que esse metodo possa ser usado para todos os meus campos?

Desculpe por esta resposta resumida, mas estou num pc sem IDE e com dor de cabeça…

você ta no caminho certo, so que nos seus metodos BordarMouseDentro e BordarMouseFora você deve fazer eles receberem como parametro um objeto JTextField e dentro dos metodos você faria o seu nome_seu_parametro.setBorder

Acho que a logica seria assim:
1 - faz o BordarMouseDentro e BordarMouseFora como mencionei acima
2 - nos eventos jTNomeMouseEntered e jTNomeMouseExited chama o BordarMouseDentro e BordarMouseFora passando o seu proprio JTextField como parametro

O problema desta logica é que se você tiver um monte de JTextField será um copia e cola miserável nos eventos

Acho que consegue uma solução mais elegante através de herança.

Espero ter sido de alguma ajuda

Venom

Fala brow…

Se eu entendi o que vc quer fazer, eh associar uma cor ao objeto, no ganho e na perda do foco, certo?
E automaticamente, fazer isso pra todos?

Bom, supondo que seus componentes estejam em um JPanel, voce pode tentar algo como:

        for (Component componente : meuPainel.getComponents()) {
            componente.addFocusListener(new java.awt.event.FocusAdapter() {
                @Override
                public void focusGained(java.awt.event.FocusEvent evt) {
                    mudaBorda();
                }
            });
        }

E no bendito mudaBorda(), fazer o “trabalho sujo”
=]
heheheh

Valeu, abraco!

venomtotal é bem isso mesmo que quero! só nao sei como eu faço pra “setar os diversos textfield” dentro do metodo! tipo eu ate pensei em pegar um textfield e deixar ele oculto e fazer com que essse textfield recebesse as bordas e depois tipo vinculava os campso que eu queria a esse textfield oculto! porem oq ia pegar é que quando eu passasse o mouse dentro de um textfield, todos qeu estivessem vinculados ao textfield oculto receberia a borda!

kenneth cara, eu nao entendi muito bem o código abaixo! e eu quero atribuir a borda apenas ao objeto com o foco! tipo o mouse esta em cima do objeto jTNome, ai ele sim ganha a borda de “Ativo”, e quando eu sair com o mouse de cima, ele ganha a borda de “Normal”!

Fazer isso eu consigo… o porem é fazer com que apenas um unico metodo MudarBordaDentro e MudarBordaFora consiga validar o JTNome e os outros 55 campos JTextField que tenho no meu Form.

Cara,
o seu erro foi apenas ter passado o parâmetro do tipo String para seu método mudaBorda. Ao invés, vc tem que passar a referência ao componente JTextField;
Agora, conforme citado anteriormente, para atribuir um comportamento customizado a todos os seus componentes de forma mais prática pode-se usar a herança, criando um novo JTextField com as características desejadas.
Segue um exemplo:

public class MyJTextField extends JTextField{
    public MyJTextField() {
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jTextFieldMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jTextFieldMouseExited(evt);
            }
        });
    }

    private void jTextFieldMouseEntered(java.awt.event.MouseEvent evt) {
        setBorder(new LineBorder(new Color(255, 0, 0)));
    }

    private void jTextFieldMouseExited(java.awt.event.MouseEvent evt) {
        setBorder(new LineBorder(new Color(180, 180, 180)));
    }
}

Desse modo se vc chamar na sua tela o componente customizado, todos terão o comportamento desejado, sem precisar ficar repetindo o código do método para mudar as cores;
inclusive uma outra melhoria seria parametrizar as cores de entrada e saída a fim de reusar em outros layouts tb.

jTNome = new MyJTextField();

Falow

o que venomtotal quis dizer foi isso aqui

 private void BordarMouseDentro(JTextField field) {  
        field.setBorder(new LineBorder(new Color(255, 0, 0)));        
 }  
    
 private void BordaMouseFora(JTextField field) {  
          field.setBorder(new LineBorder(new Color(180, 180, 180)));  
 }  

ai no evento voce faz assim

    private void jTNomeMouseEntered(java.awt.event.MouseEvent evt) {                                          
            
           BordarMouseDentro(jTNome);
    }  
      
   private void jTNomeMouseExited(java.awt.event.MouseEvent evt) {                                         
            
            BordaMouseFora(jTNome);
    }  

e da mesmo fomar para os outros Jtextfiel do form
com o seu recpectivo serto mano.

essa citação acima acaba de ser respondida.
isso sim é o que voce precissa fazer.

e não aquela logica que funcionaria mais
o ctrl+c, ctrl+v seria de esmola.

Poxa… carassssss valeu mesmo! resolvido! primeiramente quero agradecer pelas ajudas! e dizer que… tenho muito que aprender com JAVA ainda! rsrsrsrs e conto com vcs pra isso!

Marcosacm cara isso é fantastico… criar uma classe personalizada e ao inves de criar um objeto JTextField padrao eu poderia chamar o da classe que eu criei! esse conseito de herança é perfeito! rsrsrsrs

infotecccccc confesso que tinha exatamente isso na mente… eu só nao sabia como refenciar o parametro ao TextField! tipo mandei string por que nao sabia como mandar o JTextField por parametro e nem que eu podia mandar ele sem tipo “.set, .get”! mais consegui isso que importa! valeu mesmo!

Agradeço a todos!

Alguem pode me dizer nesse código oq veria a ser: addMouseListener? algo relacionado aos eventos do mouse?

Seria adicionar ao seu componente a interface que controla os eventos de mouse para que você possa adicionar “funcionalidades extras” a eles. MouseListener

hummm entendi! valeu cara!

Agora me diz…

Como eu poderia usar minha classe personalizada? tipo criaria um objeto apartir dela?

O objeto eu até criei

MyJTextField jTNome = new MyTextField(); 

O problema é que eu nao consigo fazer o TextField pararecer no meu Formulario!

Eu usaria: jTNome.setVisible(true); ???

Obs.: Eu estou trabalhando com interface grafica na criação dos forms, botões entre outros!

Fala brow…

Na verdade, voce tem que adicionar o componente (JTextField) no seu formulario…

Utilize o metodo add(seu_jtextfield), no seu JFrame ou, se estiver usando, no JPanel…

=]

kenneth consegui cara… ja deu certo! mais fiz diferente! eu criei um textfield pela gui do netbeans e ai fui em personalizar o condigo e mudei para ser criado apartir da minha classe! show de bola herança! gostei! valeu a todos! esse topico pode ser fechado! agradeço!

Faala brow…

Eh bem por ai, vai tentando e perguntando, que tu chega la…
Agora, posta ae teu codigo final, se alguem precisar disso um dia, ta na mao…
E, como grande final, muda o titulo do topico, adiciona um [RESOLVIDO] no final
=]

Abraco!