jTextPane - formatowanie fragmentu tekstu

0

Witam,
Czy ktoś z szanownego grona wie może jak w jTextPane zmienić kolor, czcionkę, cokolwiek, w zaznaczonym fragmencie tekstu? Dajmy na to, że mam współrzędne w jTextPane znaków, które chciałbym w jakiś sposób podkreślić. Zaznaczam, że chodzi mi tylko o fragmenty tekstu, nie całość.

0

Poczytaj o AttributeSet, MutableAttributeSet, StyleContans.
Jak sobie nie poradzisz to zaapeluj o przykladowy kod, na razie nie mam go pod reką...

0

Dzięki za szybką odpowiedź. Przejrzałem to co zostało podane, wpadłem na rozwiązanie, ale nie podoba mi się ono ;) Jeżeli wiesz jak to zrobić sprawniej to bym prosił o wskazówkę. Oto co zrobiłem:

1.Pobrałem dokument związany z jTextPane:
Document document = obiektjTextPane.getDocument();

2.Usunąłem tekst, który chciałem sformatować, wcześniej go zapamiętując
String str = document.getText(x, y);
document.remove(x, y);

3.Stworzyłem obiekt, klasy która implementuje podane wcześniej interfejsy
SimpleAttributeSet attSet = new SimpleAttributeSet();

4.Dodałem atrybuty i wstawiłem tekst, który wcześniej usunąłem,
StyleConstants.setItalic(attSet, true);
StyleConstants.setForeground(attSet, Color.RED);
document.insertString(x, str, attSet);

Niby działa, ale taki przerost formy nad treścią tutaj widzę ;)

0

Kiedys pisałem klienta do czata i musiałem zaimplementować akcje dla klawiszy pogrubiania, kursywy, podkreslenia, rozmiaru itp. Zalozenia byly takie ze jesli jakis fragment tekstu jest zaznaczony powinien zmienić mu własciwości czcionki, jesli nie to nastepne wpisane znaki powinny miec te atrybuty. Kluczem do zagadki jest metoda setCharacterAttributes. Wykopalem ten projekt ale ze jest w nim wiele niepotrzebnych Tobie rzeczy wiec go okroje i pokaze tylko akcje dla przycisku pogrubiania - potem sobie to przeanalizujesz. :-) Moze Ci sie kiedys przydać też RTFEditorKit ;-)

JTextPane pane;
DefaultStyledDocument doc;
RTFEditorKit kit;
int start, finish;
JToggleButton bold;
bold = new JToggleButton("B");
pane = new JTextPane();
doc = new DefaultStyledDocument();
kit = new RTFEditorKit();
pane.setEditorKit(kit);
pane.setDocument(doc);

public void setAtt(AttributeSet attr)
{
      int st = pane.getSelectionStart( );
      int fn = pane.getSelectionEnd( );
      if ( !pane.hasFocus( ) )
         {
            st = start;
            fn = finish;
         }
      if ( st != fn )
         {
            doc.setCharacterAttributes( st, fn - st, attr, false );
         }
      else
         {
            MutableAttributeSet in = kit.getInputAttributes( );
            in.addAttributes( attr );
         }
}

pane.addFocusListener( new FocusListener( )
      {
         public void focusGained( FocusEvent e )
         {
            if ( start >= 0 && finish >= 0 )
               {
                  if ( pane.getCaretPosition( ) == start )
                     {
                        pane.setCaretPosition( finish );
                        pane.moveCaretPosition( start );
                     }
                  else
                     {
                        pane.select( start, finish );
                     }
               }
         }

         public void focusLost( FocusEvent e )
         {
            start = pane.getSelectionStart( );
            finish = pane.getSelectionEnd( );
         }
      } );

bold.addActionListener( new ActionListener( )
      {

         public void actionPerformed( ActionEvent e )
         {
            MutableAttributeSet set = new SimpleAttributeSet( );
            StyleConstants.setBold( set, bold.isSelected( ) );
            setAtt( set );
            pane.grabFocus( );
         }

      } );
0

Heh, dzięki raz jeszcze. Podpatrzyłem to i owo i pomogło :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1