[RESOLVIDO] Cursor (Caret) não está psicando!

3 respostas
eliangela

Olá Pessoal!

Eis a classe de cursor visível que eu consegui aqui no fórum do GUJ:
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultCaret;
import javax.swing.text.JTextComponent;

/**
 *
 * @author Guilherme Hermeto
 */
public class CursorVisivel extends DefaultCaret {

    private static final long serialVersionUID = 1331798802240895022L;
    private int charLargura = 0;
    private int charAltura = 0;
    private JTextComponent component;

    public CursorVisivel(JTextComponent text) {
        component = text;
    }

    @Override
    public void paint(Graphics g) {
        try {
            if (isVisible()) {
                JTextComponent c = getComponent();
                int dot = getDot();
                Rectangle r = c.modelToView(dot);
                g.setColor(c.getCaretColor());
                g.drawRect(r.x, r.y, charLargura, charAltura);
                Color temp = g.getColor();
                g.setColor(Color.BLACK);
                g.fillRect(r.x, r.y, charLargura, charAltura);
                g.setColor(temp);
                repaint();
            } else {
                g.setColor(component.getBackground());
            }
        } catch (BadLocationException e) {
        }
    }

    @Override
    public synchronized void damage(Rectangle r) {
        Font f = getComponent().getFont();
        FontMetrics fm = getComponent().getFontMetrics(f);
        charLargura = fm.charWidth('k');
        charAltura = fm.getHeight();
        x = r.x - 2;
        y = r.y - 2;
        width = charLargura + 4;
        height = charAltura;
        repaint();
    }
}
Eu uso esta classe assim: meuJTextField.setCaret(new CursorVisivel(meuJTextField)) com o objetivo que o caret fique igual quando a gente pressiona a tecla insert do teclado.

O problema é que o caret não está piscando e eu gostaria que ele ficasse como na figura em anexo.
Tem alguma maneira?

Obrigada

3 Respostas

eliangela

oie… ninguém??

R

Nunca trabalhei diretamente com Caret’s, à primeira vista o código que você listou parece OK. Segue abaixo um link para você comparar sua implementação:

http://www.java-tips.org/java-se-tips/javax.swing/how-to-implement-a-fancy-caret-for-your-applic.html

eliangela

Muito obrigada, roger_rf.
Eu procurei um tempão na internet e não achava um código assim…

Ainda estou aprendendo a usar a classe Graphics e por isso não sabia como melhorar meu código.

Resolvi meu problema acrescentando essa linha:

Resolvido!

Criado 10 de junho de 2009
Ultima resposta 12 de jun. de 2009
Respostas 3
Participantes 2