Texto em Bold

Boas pessoal,

Tenho uma JTextArea e um botao, gostaria que ao pressionar este botao ele me colocasse o texto selecionado em BOLD, ou entao o texto que eu começasse a escrever depois de pressionar o botao seria todo em bold.

Alguem me pode ajudar com isso ?

Obrigado desde ja !

eu sei algumas partes…vc precisa adicionar um mouselistner no botao e depois usar um JEditorPane ( nao sei como q usa ) e depois setar onegrito ( tb nao sei rsrs )

Não dá para fazer isso com o JTextArea. Ele foi feito para texto plano. Você deve usar o JEditorPane mesmo.

Dá uma olhada:
http://java.sun.com/docs/books/tutorial/uiswing/components/editorpane.html
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html

Andei conversando com o André aqui (o mesmo que fez o editor de texto desse link http://www.guj.com.br/posts/list/48736.java) e ele me explicou que o ideal é usar um filho do JEditorPane, chamado JTextPane.

Basicamente, você não edita o JTextPane diretamente. Você faz isso através da interface document. Por exemplo, para adicionar um texto no pane você faz:

protected void append(String msg) {
   Document doc = pane.getDocument();
   msg += "\n";
   try {
      doc.insertString(doc.getLength(), msg, null);
   } catch (BadLocationException ex) { ex.printStackTrace(); }
}

O terceiro parâmetro do insertString (que está null) é um AttributeSet. Nele, você poderia alterar os atributos do texto a ser inserido, como colocar cor ou deixar em negrito.

Por exemplo, você poderia fazer um AttributeSet assim:

SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setForeground(attrs, Color.red);
StyleConstants.setItalic(attrs, true);
StyleConstants.setBold(attrs, true);

Se eu descobrir mais coisa, posto por aqui…

Há um tutorial sobre document aqui mesmo no GUJ:
http://www.guj.com.br/java.tutorial.artigo.29.1.guj

Oi,
a duvida dele é como fazer isso no JTextArea, e não em um JEditorPane gente!

Bom para trocar o tipo de fonte do seu JTextArea ao clicar no botão, faça o seguinte no evento do seu botão:

[code]
/**

  • Ação quando clicado no botão.
    */
    Action
    io_ie_mudar_cor = new AbstractAction()
    {
    public void actionPerformed(ActionEvent e)
    {
    io_tf_area_principal.setFont(FONTE_FIXA);
    }
    };[/code]

Note que o FONTE_FIXA você deve declarar uma variavel:

public final static Font FONTE_FIXA = new Font("Monospaced", Font.BOLD, 12);

Bom, se você quiser mudar a fonte apartir de quando clicar no botão, existem varios algoritimos para isso… verifica posição do caret e dali pra frente mude a fonte… ou então, ao selecionar o texto clicando no botão você mude o tipo de fonte.

Tchauzin!

Sim, Lina, mas ele falou que quer mudar apenas o texto selecionado. O TextArea trabalha com texto plano, ou seja, ou você muda a fonte de todo mundo, ou não muda de ninguém.

Ele deve usar um JTextPane, onde é possível lidar com texto formatado.

Achei uma série de exemplos, no JavaAlmanac. Você pode dar uma olhada, para entender como o JTextPane trabalha.

http://www.exampledepot.com/egs/javax.swing.text/pkg.html

Veja especialmente a sessão JTextPane e a sessão Styles.

Meu colega, o André, é o cara que realmente manja do assunto. Eu mesmo nunca usei o JTextPane.

Um outro ótimo artigo sobre texto em java:
http://java.sun.com/products/jfc/tsc/articles/text/overview/index.html

Para se utilizar qualquer tipo de Style você precisa utilizar o DefaultStyleDocument do seu JTextPane.

StyledDocument doc = textPane.getStyledDocument()

para se fazer uma parte do texto em negrito:

doc.setCharacterAttributes(offset, length, style, true);

offset : início de ondes a modificação dever ocorrer
length: tamanho da modificação, inclusive
style : Style que será usado, pode ser igual ao do Vinícius postado acima.
true : Substitui o style presente.