Mudar cor de uma palavra

Amigos, boa noite.

Tenho um programa em java, já pronto, onde faço a leitura de um texto, como no exemplo abaixo;

F Gm7 Am7 Bb/C F Gm7 Am7 Bb/C
Deve haver um lugar dentro do seu coração Onde a paz brilhe mais que uma lembrança
F Gm7 Am7 Bb/C F Gm7 Am7 Bb/C
Sem a luz que ela traz já nem se consegue mais Encontrar o caminho da esperança.

O Programa lê somente as cifras, acima da letra da música, uma a uma e em seguência e mostra cada cifra numa caixa de texto e também a imagem desta cifra numa label.

Gostaria de quando o programa estivesse lendo as cifras, esta aparecesse envolvida com uma cor azul, como se estivesse sendo selecionada para que esta fosse destacada das outras, pode ser ?

Para terminar de parar de dar trabalho para vcs, gostaria que o meu texto, fosse reconhecido os acentos ( , , ^, ~, ´ , ` ,° ) pode ser ?

Segue o um pedaço do código se precisar:

import Classes.Sonumeros;
import static Formularios.FrmVisMusicas.txtpmusica;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;

public class FrmMusicaPlay extends javax.swing.JInternalFrame {
   
    String flag;
    int cont=0;
    boolean clicado;
    public static void main (String [] args){
        
    }
    private Object reader;

   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.append (lin +"\n");
                    lin = ler.readLine();
                }
                }  catch (Exception  e) {
                    System.out.println("erroo na leitura");
                }
               
     }                                 
      private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {                                        

             this.dispose();
    }                                       
  
    private void btniniciarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // Cliquei no botão iniciar
        
         new Thread() {
             private Object evento;
            @Override
            public void run() {
        
       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) {
           String[ ] notas = lin.split("\\s");
           for (String nota : notas) {
           if (!nota.equals("")) {
                long l = Long.parseLong(txttempo.getText() + "000");
                 try {   
                     Thread.sleep(l);
                  } catch (InterruptedException ex) {
                     Logger.getLogger(FrmMusicaPlay.class.getName()).log(Level.SEVERE, null, ex);
                 }
                String nova = nota.replace("/", "_");
                nota=nova;
                txtposicao.setText (nota);
                ImageIcon imageIcon = new ImageIcon(new ImageIcon("c:/MUSIC 
                   PLAY/Notas/"+txtposicao.getText()+ 
                      ".jpg").getImage().getScaledInstance(599,243,Image.SCALE_DEFAULT)); 
                 lblnota.setIcon(imageIcon);
           }  // Fim do if
       } //Fim do for
        lin = ler.readLine();
        lin= ler.readLine();  
  }  //Fim do while
          }catch (IOException ex){ 
         
    }                                          
 } //Fim do void run
         } .start();                          //fim do Thread
         interrupt();
         Thread.currentThread().stop();
              
    } //Fim do private
     
    private void btnpararActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
            flag = txttempo.getText();
            String p = txttempopausa.getText();
            txttempo.setText(p); 
     
    }                                        

    private void btncontinuarActionPerformed(java.awt.event.ActionEvent evt) {                                             
                 String c;
                 c = flag;
                  txttempo.setText(c); 
              
    }                                            
   
    // Variables declaration - do not modify                     
    private javax.swing.JButton Btnsair;
    private javax.swing.JButton btncontinuar;
    private javax.swing.JButton btniniciar;
    private javax.swing.JButton btnparar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblnota;
    private javax.swing.JTextArea txtareamus;
    private javax.swing.JTextField txtposicao;
    private javax.swing.JTextField txttempo;
    private javax.swing.JTextField txttempopausa;
    // End of variables declaration                   

       private void interrupt() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated 
        methods, choose Tools | Templates.
    }

     } // Fim do Public Class

      Muito obrigado pela ajuda e fiquem todos com Deus. 

Armando

Está meio ruim de ler seu código mas, pelo que entendi, você está carregando a cifra de um arquivo txt para um JTextArea, certo?

O jeito mais simples que imagino que você consiga fazer isso é usar um JEditorPane ou JTextPane e carregar um arquivo html em vez de txt. Com isso, você pode usar estilos css no conteúdo e mudar a cor de palavras e afins.

Referência: https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

Abraço.

Amigo, bom dia, caramba, vai ser dificil eu mudar o esta rotina agora, o programa já esta todo pronto e as aulas de teclado já começaram, não não tem jeito, ficarei sem este artificio, muito obrigado pela ajuda.

OBS 1 : usando um JTextarea, como estou usando, não da nem para mudar a cor da cifra ( passar de preto para azul ou vermelho) quando o programa mostra a cifra em uma variável com a minha rotina faz ??? Os arquivos das musicas, podem ser em PDF ou em TXT, não tenho este arquivo em HTML.

OBS 2 : O que devo fazer para que o Java coloque os acentos no meu texto .txt ???

Obrigado.

Armando

Vc ta postando o seu código todo, posta somente o local que você quer ajuda, fica mais facil de ler.

É método


Isso aqui vc resolve com REGEX, aquele site que eu te passei tem um exemplo de como buscar só acentos.

Bom dia a todos, vamos começar de novo então;

1° Fui orientado a mudar de JTextArea para JtextPane, para trabalhar com código HTML. se não tiver outra solução, farei isso. Alias, JÁ FIZ , coloquei o mesmo nome da variável do JTextArea em JTextPane (txtareamus) para não mudar muito o programa e obtive meu primeiro erro, pelo visto não posso usar um append(string) em JtextPane, pergunto, o que usar ? Não sei, estou aprendendo java.

Erro : Cannot find symbol
sysmbol: method append (string)
Location variável txtareamus of type JtextPane.

O erro é visto na linha abaixo, com um OBS.

package Formularios;

import Classes.Sonumeros;
import static Formularios.FrmVisMusicas.txtpmusica;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;

public class FrmMusicaPlay extends javax.swing.JInternalFrame {

String flag;
int cont=0;
boolean clicado;
public static void main (String [] args){
    
}
private Object reader;

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.append (lin +"\n"); ***** OBS : erro aparece nesta linha *****
lin = ler.readLine();
}
} catch (Exception e) {
System.out.println(“erroo na leitura”);
}

 }  

Primeira pergunta, como corrigir este erro ?

Seguindo, eu trocando de JTextArea para JtextPane, como eu posso fazer para quando o programa mostrar a cifra lida conforme mostro abaixo , ele coloque a cifra como quando selecionamos uma palavra em um texto, ou seja, letra preta em volto em azul, me esqueci o nome que se da a isso,

private void btniniciarActionPerformed(java.awt.event.ActionEvent evt) {
// Cliquei no botão iniciar

     new Thread() {
         private Object evento;
        @Override
        public void run() {
    
   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) {
       String[ ] notas = lin.split("\\s");
       for (String nota : notas) {
       if (!nota.equals("")) {
            long l = Long.parseLong(txttempo.getText() + "000");
             try {   
                 Thread.sleep(l);
              } catch (InterruptedException ex) {
                 Logger.getLogger(FrmMusicaPlay.class.getName()).log(Level.SEVERE, null, ex);
             }
            String nova = nota.replace("/", "_");
            nota=nova;         OBS : neste ponto, o programa coloque a cifra lida em evidencia no texto,
                                         a cifra em letra preta, como já é, envolvida em azul, vermelho ou amarelo,
            txtposicao.setText (nota);
            ImageIcon imageIcon = new ImageIcon(new ImageIcon("c:/MUSIC PLAY/Notas/"+txtposicao.getText()+ ".jpg").getImage().getScaledInstance(599,243,Image.SCALE_DEFAULT)); 
             lblnota.setIcon(imageIcon);
       }  // Fim do if
   } //Fim do for
    lin = ler.readLine();
    lin= ler.readLine();  

} //Fim do while
}catch (IOException ex){

}                                          

} //Fim do void run
} .start(); //fim do Thread
interrupt();
Thread.currentThread().stop();

Obs : tmb gostaria que o Java aceitasse os acentos do texto .txt no JTextPane, caso precise usa-lo.

Amigo, fui claro ??? Vc já me ajudou várias vezes e eu só posso te agradecer e pedir saude a Deus para vc, mais uma vez, muito obrigado

Desculpa amigo, estou aprendendo, é METODO !!! Valeu, vc é o cara !

Edita sua questão por favor, posta só os códigos referentes a sua pergunta! Fica confuso ler linha por linha pra identificar o problema em si.

Pode retirar os imports, o nome da classe…

Você pode usar o

appendToPane(seuTextPane, "Over", Color.MAGENTA);
appendToPane(seuTextPane, "flow", Color.ORANGE);

Nesse link que te mandei acima tem o exemplo

Amigo, tá meio confuso para mim, olhei o codigo e entendi, mas minha duvida é, tenho que fazer uma nova classe e depois colocar os comandos abaixo no lugar que quero que ele faça a evidencia da cifra ??? Ou seja, tenho que colocar esta linha onde coloquei um obs ?

         appendToPane(nota, "Over", Color.BLUE);

como faço a linha com erro depois que troquei o Jtextarea por JtextPane ?

 txtareamus.append (lin +"\n");

Pode mandar o site para ver sobre os acentos de novo, não estou encontrando.

Obrigado.