Boa noite galera 
Há um tempo atrás que criei outro topico perguntando como colocar um icone em um JTextField e consegui uma boa resposta e agradeço aos que me ajudaram, desde então tentei fazer mais customizaçãos no meu JTextField, o proposito final é de quando o usuario clicar sobre ele, a cor da borda e a textura do campo ser uma, e quando ele perde o foco mudar a cor da borda e a textura. Então comecei a procurar na documentação e não achei nenhum metodo na interface Border e nem nas classes que a implementa e herdam destas. depois queria mudar a corda da fonte do JTextField, porem não encontrei um método na classe Font nem na JTextField para mudar a cor da fonte, então acho que estou caminhando na estrada errada na hora de customizar meus components e gostaria de saber como faço para resolver esses problemas e qual a melhor maneira de customizar meus componentes?
Meu JTextField customizado
JTextFieldExtended
import javax.swing.JTextField;
import javax.swing.BorderFactory;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import javax.swing.plaf.*;
import javax.imageio.ImageIO;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.Color;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class JTextFieldExtended extends JTextField
{
private BufferedImage imagemDoCampo; //Imagem usada como textura do campo.
private TexturePaint texturaDoCampo; //Textura do campo.
private Color corDaBorda;
private Color corDaBordaEmFoco;
public JTextFieldExtended(File textura, int comprimento, Color corBorda, Color corBordaAtiva)
{
super(comprimento);
corDaBorda = corBorda;
corDaBordaEmFoco = corBordaAtiva;
try
{
imagemDoCampo = ImageIO.read(textura);
}
catch (IOException ex)
{
ex.printStackTrace();
}
Rectangle retangulo = new Rectangle(0, 0, imagemDoCampo.getWidth(null), imagemDoCampo.getHeight(null));
texturaDoCampo = new TexturePaint(imagemDoCampo, retangulo);
setOpaque(false);
}
public JTextFieldExtended(File textura, int comprimento)
{
this(textura, comprimento, null, null);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(texturaDoCampo);
g2.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
private void addDefaultFocusListener()
{
this.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent event)
{
if (corDaBordaEmFoco != null)
{
}
}
public void focusLost(FocusEvent event)
{
}
});
}
public static void main(String args[])
{
JFrame janela = new JFrame();
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.getContentPane().setLayout(new FlowLayout());
JTextFieldExtended field = new JTextFieldExtended(new File("textura.png"), 15);
janela.getContentPane().add(field);
janela.setSize(320, 240);
janela.setVisible(true);
janela.show();
}
}