JTextField - definindo uma cor de foco

Para definir a cor de foco, basta adicionar um evento chamado FocusListener no JTextField, para isso crie uma classe que implementa FocusListener como a abaixo:

CorFocusListener

import java.awt.Color;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

 

import javax.swing.JComponent;

import javax.swing.JTextField;

 

public class CorFocusListener implements FocusListener {

 

 private Color corBackup = Color.WHITE;

 private boolean selectAll; 

 

 CorFocusListener() {

         this.selectAll = false;  // por padrão ao receber o foco não seleciona tudo

 }

 

 // construtor com parâmetro para poder ativar o "selectall" quando o componente for JTextField

 CorFocusListener(boolean selectAllOnFocus) {

         this.selectAll = selectAllOnFocus;

 }

 

 public void focusGained(FocusEvent e) {

         if (e.getSource() instanceof JComponent)

                 corBackup = ((JComponent)e.getSource()).getBackground(); 

                 ((JComponent)e.getSource()).setBackground(Color.YELLOW);

 

         if (e.getSource() instanceof JTextField && selectAll)

                 ((JTextField)e.getSource()).selectAll();

 }

 public void focusLost(FocusEvent e) {

         if (e.getSource() instanceof JComponent) {

                 ((JComponent) e.getSource()).setBackground(corBackup);

         }

 }

}

 

Exemplo de uso

 

import java.awt.FlowLayout;

 

import javax.swing.JFrame;

import javax.swing.JTextField;

 

public class Geral extends JFrame {

 

    private JTextField campo1;

 private JTextField campo2;

 private JTextField campo3;

 

 public Geral() {

       setSize(200110);

       setDefaultCloseOperation(EXIT_ON_CLOSE);

       setLayout(new FlowLayout());

 

          campo1 = new JTextField(7);

             campo2 = new JTextField(10);

             campo3 = new JTextField(10);

 

             add(campo1);

       add(campo2);

       add(campo3);

       

       // aqui associamos os eventos de foco

       CorFocusListener f = new CorFocusListener();

       campo1.addFocusListener(f);

       campo2.addFocusListener(f);

       campo3.addFocusListener(f);

       

       setVisible(true);

 }

 

 public static void main(String[] args) {

         new Geral();

 }        

}

 

Tela

 

 

Repare que o campo com foco está amarelo.

Se passar true para o construtor do CorFocusListener ao focar um JTextField com conteúdo, o mesmo será selecionado (selectall)

Observações

Não apenas componentes descendentes de JTextField ficam amarelos ao receber o foco, mas também qualquer componente visual descentente de JComponent.