JTextField Personalizado

2 respostas
Igor_Novaes

Olá todos!

Gostaria de saber se é possível criar uma classe e nela criarmos modelos de objetos (um JTextField por exemplo) para que possamos utilizar esses modelos no sistema.

Neste caso eu quero diminuir código, ou seja, formatar um tipo de objeto e usar aquele modelo no resto do sistema (herdando desta classe).

O meu problema não é a herança, mas sim como utilizar objetos já projetados da forma que eu quero sem perder tempo formatando cada objeto novo que instancio no projeto.

Gostaria de uma “Luz”, pois sei que é possível. Apenas estou desorientado.

Agradeço muito a atenção de todos.
Igor

2 Respostas

T

Use herança mesmo. No caso do NetBeans é possível até pegar essas classes herdadas e pô-las na “palette” para podermos usar as classes no editor visual. É importante que a classe tenha um construtor público sem parâmetros.

Um exemplo de um JTextField que usei em um projeto:

public class XXXTextField extends JTextField implements FocusListener {
    private static Color defaultBackground = new Color (223, 223, 223);
    private static Color focusedBackground = new Color (255, 255, 255);//223,223,223 vermelho claro anterior
    private static Border defaultBorder = BorderFactory.createLineBorder (Color.DARK_GRAY);
    private static Border focusedBorder = BorderFactory.createLineBorder(Color.DARK_GRAY, 1);
    private static Font defaultFont = new Font ("Verdana", Font.PLAIN, 12);
    private static Font defaultReadonlyFont = new Font ("Verdana", Font.BOLD, 12);
    private static Color defaultForeground = Color.BLACK;
    private static Color defaultReadonlyBackground = Color.WHITE;
    private static Border defaultReadonlyBorder = BorderFactory.createEmptyBorder();
    private static Border designTimeReadonlyBorder = BorderFactory.createEmptyBorder();
    public XXXTextField () {
        setFont(defaultFont);
        setForeground(defaultForeground);
        addFocusListener (this);
    }

    public void focusGained(FocusEvent e) {
        defaultBackground = getBackground();
        defaultBorder = getBorder();
        setBackground (focusedBackground);
        setBorder(focusedBorder);
    }

    public void focusLost(FocusEvent e) {
        setBackground (defaultBackground);
        setBorder(defaultBorder);
    }
}
Igor_Novaes

Valeu a dica mesmo!

Mas se eu estiver no NetBeans e fizer uma classe dessas com todos os modelos de componentes, como faço para posicioná-lo graficamente num Frame assim como faço com qualquer outro componente comum que eu adicionasse?

Existe uma maneira de colocar um TxtField, por exemplo, no Frame (visualmente) e fazer com que ele assuma um modelo criado existente em outra classe.

Esta é a minha dificuldade para ficar com o NetBeans. Estou batendo na tecla da produtividade, que é fundamental em Java.

Agradeço a ajuda de todos.
Igor

Criado 9 de maio de 2007
Ultima resposta 13 de mai. de 2007
Respostas 2
Participantes 2