Um Unico Método Para Varios Objetos!

13 respostas
leofdasilva

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?

13 Respostas

venomtotal

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

kenneth

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!

leofdasilva

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.

M

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

ajinfotec

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.

ajinfotec

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.

leofdasilva

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!

leofdasilva

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

Jose111

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

leofdasilva

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!

kenneth

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…

=]

leofdasilva

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!

kenneth

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!

Criado 21 de agosto de 2010
Ultima resposta 23 de ago. de 2010
Respostas 13
Participantes 6