Domanda

Voglio che il mio JTextPane per inserire spazi ogni volta che premere il tasto Tab. Attualmente si inserisce il carattere di tabulazione (ASCII 9).

Esiste un modo per personalizzare la politica scheda di JTextPane (diverso da cattura di eventi "scheda-chiave" e inserendo gli spazi mi sembra una)?

È stato utile?

Soluzione

È possibile impostare una javax.swing.text.Document sul JTextPane. L'esempio che segue vi darà un'idea di quello che voglio dire:)

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;

public class Tester {

    public static void main(String[] args) {
        JTextPane textpane = new JTextPane();
        textpane.setDocument(new TabDocument());
        JFrame frame = new JFrame();
        frame.getContentPane().add(textpane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(200, 200));
        frame.setVisible(true);
    }

    static class TabDocument extends DefaultStyledDocument {
        @Override
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            str = str.replaceAll("\t", " ");
            super.insertString(offs, str, a);
        }
    }
}

Definire un DefaultStyleDocument per fare il lavoro. Quindi impostare il documento sul JTextPane.

Saluti Kai

Altri suggerimenti

Per quanto ne so, che ci si deve prendere eventi chiave, come dici tu. A seconda dell'utilizzo, si potrebbe anche ottenere via con attesa fino a quando viene presentata l'ingresso, e cambiando le tabulazioni in spazi in quel momento.

Si potrebbe provare sub-classing DefaultStyledDocument ed inserto assoluta di sostituire le schede negli elementi inseriti con gli spazi. Quindi installare la vostra sottoclasse in JTextPane con setStyledDocument (). Questo può essere più problemi di quanto la cattura di eventi chiave però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top