Como usar um append num JtextPane

Gente, boa tarde, estava usando um comando append para colocar um texto em uma JTextArea, como tive que mudar para uma JTextPane, como uso o append.

Abaixo envio a parte onde faço o Append.

public FrmMusicaPlay() {
initComponents();
txttempo.setDocument(new Sonumeros());
txtareamus.setText ("");
File arquivo = new File(“C:\MUSIC PLAY\Musicas\”+txtpmusica.getText()+".txt");
try {
BufferedReader ler = new BufferedReader(new FileReader(arquivo));
String lin = ler.readLine();
while (lin != null){
txtareamus.appendToPane (lin +"\n"); OBS : Tentei isso, mas esta dando erro.
lin = ler.readLine();
}
} catch (Exception e) {
System.out.println(“erroo na leitura”);
}

Obrigado.

Eu procurei por esse método appendToPane() na documentação do Java e não encontrei. De onde vem esse método?

Amigo, boa tarde, eu tentei usar assim, já que o append , só funciona para uma JTextArea e não funciona para um JTextPane.

Vc saberia me dizer como eu uso o Append para um JTextPane ou JEditorPane como eu usava no programa abaixo. (txtareamus) é o nome da variável do JEditorPane.

    File arquivo = new File("C:\\MUSIC PLAY\\Musicas\\"+txtpmusica.getText()+".txt");
    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
            String  lin = ler.readLine();
            while (lin  != null){
               txtareamus.append (lin +"\n");     OBS : ======== > o erro aparece AQUI.
                lin = ler.readLine();
            }
            }  catch (Exception  e) {
                System.out.println("erroo na leitura");
            }

Os componentes JEditorPane e JTextPane não têm o método append(String str). No entanto, você pode implementá-lo, como pode ser visto aqui: JTextPane appending a new string.

Meu boa tarde, Só gostaria de deixar registrado, para quem tem uma duvida num método qualquer, mandar a pessoa procurar em um outro lugar, fica 2 vezes mais difícil, continuo com minha duvida, mandei meu código, conforme pedido, expliquei minha dúvida, mas continuo com ela, tenho que aprender esta linguagem. Meu muito obrigado para as pessoas que realmente me ajudaram, foi um prazer conhece-las. Armando Barbosa.

Olha, nem sempre você vai encontrar a resposta de primeira vez, se você quer realmente aprender, a melhor coisa a se fazer é pesquisar, pesquisar, pesquisar e pesquisar.

A gente ainda passou os sites pra você pesquisar, vai ter momentos que ninguém sequer vai te responder. Então só vai sobrar você e a gigantesca internet. Então se você quer aprender, pesquisa bastante.

Vamos lá,

appendToPane();

Nada mais é do que um método criado pela pessoa do link que eu te passei.

private void appendToPane(JTextPane tp, String msg, Color c) {
    StyleContext sc = StyleContext.getDefaultStyleContext();
    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); //muda a cor

    aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console"); //muda a fonte
    aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED); //muda o alinhamento do texto

    int len = tp.getDocument().getLength(); //pega o tamanho total do texto
    tp.setCaretPosition(len); //joga o cursor pro final do texto.
    tp.setCharacterAttributes(aset, false);
    tp.replaceSelection(msg); //escreve a mensagem
}

A única coisa que ele faz é chamar esse método:

 appendToPane(tPane, "Sou uma pessoa.\n", Color.RED);
 //tPane é o nome do TextPane
 //"Sou uma pessoa" é a mensagem
 //Color.RED é a cor que essa mensagem vai ser.

Link para pesquisas futuras:

Ok amigo, vc esta certo, tenho que estudar mais o Java, tenho que pesquisar mais o Java, estou na bronca comigo mesmo, e passei adiante, vcs não tem nada com isso.

Muito obrigado pela ajuda, vlw mesmo.

Armando

Amigo, só para terminar com isso, entendi o método que vc me enviou e acho melhor trabalhar com JTextPane, só tenho uma duvida, troquei em projeto o JtextArea por um JTextPane, até ai tudo bem, só que a linha que eu tenho no código, não funciona o append, dá erro, e eu sei que append não é usado no JTextPane, então como que eu faço esta linha no JtextPane ??? só isso !!! esta é a minha dúvida , o resto eu já sei.

    File arquivo = new File("C:\\MUSIC PLAY\\Musicas\\" + txtpmusica.getText() + ".txt");
    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
        String lin = ler.readLine();
        while (lin != null) {
            JTxtPane.append(lin + "\n"); * * * * * * AQUI DÁ O ERRO !!!! como eu faço esta linha ?  ?  ?  ?  * *
                    * lin = ler.readLine();
            esta linha mostra o texto em JTextPane
        }
    } catch (Exception e) {
        System.out.println("erroo na leitura");
    }

muito obrigado.

Fiz desta maneira. Tô tentando …

    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
        String lin = ler.readLine();
        while (lin != null) {
            JTextPane.appendToPane(lin + "\n");         // OBS : DEU ERRO  !!!
            lin = ler.readLine();
        }
    } catch (Exception e) {
    }

//Da segunda maneira, não deu erro, mas não aparecer o texto dentro da JTextPane.

    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
        String lin = ler.readLine();
        while (lin != null) {
            JTextPane.setText(lin + "\n");                     //OBS : não deu erro, mas o texto não apareceu lin = ler.readLine();                                                 em JTextPane.
        }
    } catch (Exception e) {
    }

Não tem problema em perguntar, o fórum existe pra isso mesmo, mas o segredo pra aprender mesmo é ir pesquisando.


Coloca esse método no seu código.

private void appendToPane(JTextPane tp, String msg, Color c) {
    StyleContext sc = StyleContext.getDefaultStyleContext();
    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); //muda a cor

    aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console"); //muda a fonte
    aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED); //muda o alinhamento do texto

    int len = tp.getDocument().getLength(); //pega o tamanho total do texto
    tp.setCaretPosition(len); //joga o cursor pro final do texto.
    tp.setCharacterAttributes(aset, false);
    tp.replaceSelection(msg); //escreve a mensagem
}

E depois chama assim:

appendToPane(JTextPane, lin + "\n", Color.BLUE);

Então vc vai trocar isso:

JTextPane.setText(lin + "\n");   

pela linha que passei acima:

appendToPane(JTextPane, lin + "\n", Color.BLUE);

Amigo, funcionou, este método é muito dificil para o meu grau de conhecimento, agora só falta sair em evidencia as cifras, isso não funcionou, mas vou pesquisar, pelo menos estou usando o JTextPane, muito obrigado e desculpa pela minha atitude, vc tem toda a razão. Fique com Deus.

Vendo melhor, vi que ele mudou todas as linhas para azul, o que eu queria era que mudasse somente a cifra que estava lendo no momento, vou ver isso.

Amigo, já fiz isso, mas este método troca a cor de todo o texto, eu gostaria somente de trocar a cor da cifra lida, que se encontra em uma variável, não de todo o texto, mesmo assim, obrigado pela ajuda, vou continuar pesquisando e aprendendo. Armando.

Você está com uma dúvida sobre um método appendToPane, este método não existe na classe JTextPane, imagino que você tenha copiado o método de algum lugar.

De fato você precisa aprender os conceitos de programação orientada à objetos para saber como criar o seu próprio JTextPane que contenha um método novo com uma funcionalidade nova.

Pois bem, abaixo está um exemplo de como criar seu próprio JTextPane contendo um método append que funciona igual ao append do JTextArea:

import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

@SuppressWarnings("serial")
public class MeuEditor extends JTextPane {

    public void append(String textoParaInserir) {
        try {
            Document document = getDocument();
            int posicaoOndeInserir = document.getLength();
            document.insertString(posicaoOndeInserir, textoParaInserir, null);
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}

Agora basta alterar seu txtareamus para ser do tipo MeuEditor ao invés de JTextPane:

private MeuEditor txtareamus;

E seu código deve funcionar:

public FrmMusicaPlay() {
    initComponents();
    txttempo.setDocument(new Sonumeros());
    txtareamus.setText("");
    File arquivo = new File("C:\\MUSIC PLAY\\Musicas\\" + txtpmusica.getText() + ".txt");
    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
        String lin = null;
        while ((lin = ler.readLine()) != null) {
            txtareamus.append(lin + "\n"); // chamando o método append do MeuEditor
        }
    } catch (Exception e) {
        System.out.println("erro na leitura");
    }
}

Amigo, vivo pedindo desculpas para o Abner Rodrigos a respeito da minha falta de conhecimento sobre a linguagem Java, vcs estão totalmente certos, eu estou errado, quis fazer um programa sem ter conhecimento para isso, é que estou aprendendo a tocar teclado musical e precisava deste programa para me ajudar as ver as cifras, mas concordo com vcs e já estou com dois livros de java e a internet me ajudando, vlw pela dica e conselho, um grande abç e obrigado, fique com deus.

Não vejo necessidade de pedir desculpas pela falta de conhecimento, ninguém nasceu sabendo, talvez o que lhe falta é um pouco de paciência. Aprenda no seu ritmo e tente não pular etapas. :slight_smile:

Não concordo, você está desafiando a si mesmo e tentando fazer algo novo que nunca fez antes, isso é muito bom, mas vá com calma, você está tentando pular etapas de aprendizado e com isso suas dúvidas se tornam mais complexas e mais difíceis de entender a solução.

Então além de aprender a programar, você está aprendendo teclado musical e além disso tudo está tentando unir as duas coisas. Sensacional, continue assim.

Só tenha paciência, as vezes um colega te responde para dar uma lida em algum outro material é porque é importante ter aquele entendimento e não faz sentido copiar o conteúdo de outra página para postar aqui.

Tenho acompanhado um pouco das suas dúvidas e de fato o que você está desenvolvendo não é trivial, não é coisa de iniciante, exige uma série de conhecimento:

  • leitura e escrita de arquivos;

  • desenvolvimento de desktop GUI (telinhas);

  • processamento de texto para fazer o code highlight (cifras coloridas);

Sabia que o que você está fazendo tem características muito parecidas com trabalhos de final de semestre de uma disciplina chamada compiladores?
Então não se cobre tanto e, novamente, tenha paciência.
:slight_smile:

1 curtida

Obrigado amigo, já estou fazendo isso, como te falei, pulei etapas porque precisava fazer logo o programa, sou meio elétrico , tenho 65 com cara e preparo fisico de 40, espero viver muito e com energia, vlw amigo, fique com Deus.

1 curtida

Valeu cara, fiquei feliz e emocionado com suas palavras, faltou somar a isso, o trabalho que tenho na Igreja como Operador de áudio (terça, quinta, sábado e domingo), trabalho de gravação e edição de áudio que faço em meu estúdio musical e quando me chamam, figuração na rede Globo, nas novas novelas da emissora “Amor de mãe e Eramos 6”, quando estas novelas estiver no ar, quando vc ver uma cara bonitão, quarentão, cabelo grisalho e cheio de saúde, graças a Deus, sou eu, parece ate musica do Roberto Carlos. Amigo, vlw, fique com Deus.

2 curtidas