Dúvida - como deixar o texto em negrito

1 resposta
O

Olá pessoal, este é o meu primeiro tópico, agradeço quem puder ajudar.

Estou fazendo um editor de texto bem simples pra treinar swing, coloquei um botão negrito e outro itálico, porém quando seleciono o botão negrito por exemplo, tudo o que está escrito fica negrito, mas a intensão é que apenas o que for digitado após o botão ser clicado fique negrito, como faço isso? Por enquanto o código está assim:

import java.awt.*;
import java.awt.event.*;
import java.awt.font.TextLayout.CaretPolicy;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.*;
import javax.swing.event.CaretEvent;
import javax.swing.text.Caret;

import com.sun.org.apache.xpath.internal.functions.Function;

public class GravarArqJDialog extends JFrame implements ActionListener, MouseListener {

    JButton abrir, gravar, limpar;
    JToggleButton negrito, italico;
    JLabel l1, l2;
    JTextField tfTexto;
    TextArea txArea1;
    JPanel panel1;
    FileDialog fdAbrir, fdSalvar;
    int negr=0, italic=0;

    public static void main(String[] args)
    {

        JFrame janela = new GravarArqJDialog();
        janela.setUndecorated(true);
        janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setVisible(true);
    }

    GravarArqJDialog()
    {
        setTitle("Cadastro");
        setBounds(250, 50, 500, 300);
        setResizable(false);
        setBackground(new Color(150, 150, 150));
        setLayout(new FlowLayout());
        l1 = new JLabel("Texto a ser editado:");
        l1.setForeground(Color.black);
        l2 = new JLabel("Status");
        l2.setForeground(Color.black);
        abrir = new JButton("Abrir");
        gravar = new JButton("Gravar");
        limpar = new JButton("Limpar");
        negrito = new JToggleButton("N");
        italico = new JToggleButton("I");
        negrito.setBackground(Color.lightGray);
        italico.setBackground(Color.lightGray);
        negrito.addMouseListener(this);
        italico.addMouseListener(this);
        abrir.addActionListener(this);
        gravar.addActionListener(this);
        limpar.addActionListener(this);
        tfTexto = new JTextField(35);
        tfTexto.setForeground(Color.red);
        tfTexto.setEditable(false);
        panel1 = new JPanel();
        panel1.setLayout(new FlowLayout());
        panel1.add(l2);
        panel1.add(tfTexto);
        txArea1 = new TextArea(8, 60);
        fdAbrir = new FileDialog(this, "Abrir arquivo", FileDialog.LOAD);
        fdSalvar = new FileDialog(this, "Salvar arquivo", FileDialog.SAVE);
        add(l1);
        add(txArea1);
        add(gravar);
        add(abrir);
        add(limpar);
        add(negrito);
        add(italico);
        add(panel1);

    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        boolean ligado = false;
        String nomeArq;
        if (e.getSource() == limpar)
        {
            txArea1.setText("");
            tfTexto.setText("");
            txArea1.requestFocus();
        }

        if (e.getSource() == gravar)
        {
            try
            {
                fdSalvar.setVisible(true);
                if (fdSalvar.getFile() == null)
                    return;
                nomeArq = fdSalvar.getDirectory() + fdSalvar.getFile();
                FileWriter out = new FileWriter(nomeArq);
                out.write(txArea1.getText());
                out.close();
                tfTexto.setText("Arquivo gravado com sucesso!");
            } catch (IOException erro)
            {
                tfTexto.setText("Erro ao gravar arquivo");
            }
        }
       
        if (e.getSource() == abrir)
            {
                try
                {
                    fdAbrir.setVisible(true);
                    if (fdAbrir.getFile() == null)
                        return;
                    nomeArq = fdAbrir.getDirectory() + fdAbrir.getFile();
                    FileReader in = new FileReader(nomeArq);
                    String s = "";
                    int i = in.read();
                    while (i != -1)
                    {
                        s = s + (char) i;
                        i = in.read();
                    }
                    txArea1.setText(s);
                    in.close();
                    tfTexto.setText("Arquivo aberto com sucesso!");
                } catch (IOException erro)
                {
                    tfTexto.setText("Erro ao abrir arquivo");
                }
            }
       
       
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        if(e.getSource()==negrito)
        {
            if(negrito.isSelected()==true)
                negr = Font.BOLD;
            else
                negr = Font.PLAIN;
           
        }
        if(e.getSource()==italico)
        {
            if(italico.isSelected()==true)
                italic = Font.ITALIC;
            else
                italic = Font.PLAIN;
           
        }
   
            txArea1.setFont(new Font("Arial",negr+italic,14));
            txArea1.requestFocus();
           
       
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
       
       
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
       
    }
   
   
}

Muito obrigado!

Abços

1 Resposta

71C4700

Cara desculpa pela pressa mas, tenta procurar por document, que ele trabalha com style.

E seria melho vc trabalhar com o JEditorPane ao enves de JTextArea, pois quando modifica uma propriedade no JTextArea muda de todo o componente, e nao de apenas uma linha, mas o JEditorPane, permite alterar cada linha.

Depois das 11 acho que to com um tempo a mais manda uma mp com teu email que te mando uma classe pra faze isso…

Criado 3 de dezembro de 2008
Ultima resposta 3 de dez. de 2008
Respostas 1
Participantes 2