2008-12-12 1 views
1

Я хочу, чтобы моя JTextPane вставляла пробелы всякий раз, когда я нажимаю Tab. В настоящее время он вставляет символ табуляции (ASCII 9).Настройка политики вкладок в JTextPane Swing

Есть ли какой-либо способ настроить политику табуляции JTextPane (кроме захвата «tab-key» событий и вставки пробелов, кажется, а)?

ответ

5

Вы можете установить javax.swing.text.Document на свою JTextPane. Следующий пример даст вам представление о том, что я имею в виду :)

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); 
     } 
    } 
} 

Определение DefaultStyleDocument, чтобы сделать работу. Затем установите документ в JTextPane.

Cheers Kai

0

Насколько я знаю, вам придется поймать ключевые события, как вы говорите. В зависимости от использования вы также можете уйти с ожиданием до ввода ввода и изменения вкладок в пробелы в это время.

0

Вы можете попробовать подклассифицировать DefaultStyledDocument и переопределить вставку, чтобы заменить любые вкладки вставленных элементов пробелами. Затем установите ваш подкласс в JTextPane с помощью setStyledDocument(). Это может быть больше проблем, чем улов ключевых событий.