Srs, boa tarde, como sempre dizem, no meu caso é verdade, sou novo no Java, tenho somente 1 mês que venho estudando , pesquisando e dando murro em ponta de faca no Java. Estou fazendo um programa em java para me ajudar a aprender teclado musical. o que faz até agora o meu programa;
1 - A parte que estou no momento e onde tenho duvida para terminar é a seguinte.
Tenho em um diretório, uma pasta com arquivo .txt que corresponde a músicas com as cifras acima das letras, conforme mostrarei abaixo e uma outra pasta contendo arquivos JPG que corresponde as imagens das posições das cifras no teclado musical.
Arquivo .txt Arquivo
C G/B Am7 Am7/G
Ao único que é digno de receber
F C/E
A honra e a glória …
Arquivo .jpg
Imagem do teclado com a cifra(nota musical)
Bem, o programa joga este arquivo .txt numa JTextPane (um amigo deste grupo, pediu para eu trabalhar com o JTextPane) e depois faz a leitura de linha a linha deste .txt, lendo somente as linhas onde estão as cifras, a letra da musica não me interessa e o programa não as ler.
Por exemplo, o programa leu a cifra “G/B”, além dele colocar esta cifra em uma caixa de texto (txtposicao), ele mostra a imagem da cifra (nota musical), numa label (lblnota), vai mostrando uma a uma e eu programei um tempo que escolho num JtextField da musica e assim posso ver por uns 2,3,4 seg a imagem da posição da cifra.
Hoje o programa esta fazendo isso sem erro e ao contento. Agora vamos ao meu GRANDE problema, que já duram 2 semanas e mesmo pesquisando, meu pouco conhecimento da linguagem, não me deixa prosseguir com o código, talvez tenha encontrado a solução , mas não sei onde encaixar e qual a linha chamar o método visto.
Gostaria que o programa, ao ler cada cifras, que é colocada numa variável chamada de “NOVA” fosse mudando a cor da cifra lida ou colocando em evidencia a cifra lida com uma cor de fundo azul, por exemplo no JTextPane, sei que é possível, ví vários modos de fazer isso, testei vários deles , mas não sei como colocar estes métodos vistos dentro do meu programa, nem em que linha devo fazer a chamada para ele fazer o que quero.
Primeiro, será que fui claro ??? se fui, vcs podem me ajudar ??? Abaixo mando um pedaço do método que usei para isso, somente a parte onde faço a leitura das cifras.
Código :
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"); //Abro o arquivo .txt
(minha musica cifrada)
try{
BufferedReader ler = new BufferedReader(new FileReader(arquivo));
String lin = ler.readLine(); //Leio a primeira linha
while (lin !=null) {
String[ ] notas = lin.split("\s"); //Retiro da linha as cifras e não somente um caractere.
for (String nota : notas) {
if (!nota.equals("")) { // se lendo a linha, eu tenho espaço, pulo e só pego as cifras
long l = Long.parseLong(txttempo.getText() + “000”); // coloco num JTextField (txttempo) o tempo
de espera ou o compasso da musica.
try {
Thread.sleep(l); //Paro o programa por 2,3,4,6 seg, dependo do compasso da musica.
} catch (InterruptedException ex) {
Logger.getLogger(FrmMusicaPlay.class.getName()).log(Level.SEVERE, null, ex);
}
String nova = nota.replace("/", ""); //quando uma cifra tem “/” exemplo : C/F eu troco para (),
pois estas cifras são gravadas no Windows com (_), o
windos não aceita gravar por exemplo Cm/G, somente
Cm_G.
nota=nova;
CREIO QUE AQUI SERIA O LUGAR PARA FAZER A CHAMADA PARA MUDAR DE COR A CIFRA, POIS JÁ A TENHO NA VARIÁVEL NOVA, A CIFRA LIDA.
txtposicao.setText (nova); //Coloco a cifra lida neste JTextField (txtposicao)
ImageIcon imageIcon = new ImageIcon(new ImageIcon(“c:/MUSIC PLAY/Notas/”+txtposicao.getText()+
“.jpg”).getImage().getScaledInstance(599,243,Image.SCALE_DEFAULT));
lblnota.setIcon(imageIcon); //Aqui coloco a imagem da cifra em um Label (lblnota)
} // Fim do if
} //Fim do for
lin = ler.readLine();
lin= ler.readLine(); // Aqui pulo uma linha que é a linha da letra da musica que não
me interessa e vou para linha onde estão as próximas cifras.
} //Fim do while
}catch (IOException ex){
}
OBS :
Minha maior dúvida é onde devo colocar no meu programa o método que coloca a cor na cifra e onde chama-lo, pelo meu pouco conhecimento de programação em Java, consegui fazer este programa, pesquisando na internet, nosso pai nosso de todos os dias. Amém !
Srs, espero resolver este problema, porque só falta este método para eu terminar o programa, meu muito obrigado.
Armando