Não consigo saber em que linha estou quando leio um texto

16 respostas
java
F

Srs, boa noite.

Tenho um programa, onde faço a leitura de um texto, no momento que clico no botão iniciar (btniniciar), no código, só consigo verificar quantas notas musicais ele lê, mas não tenho como saber qual é a linha que o código esta lendo, necessito saber o valor desta linha para incrementar um IF e quando eu estiver na linha X, poder fazer uma operação, conforme tentei fazer em meu código, mas esta dando erro na linha tento ver o numero da linha que estou, embora o código seja grande, vou manda-lo para ver se alguém pode me ajudar.

package Formularios;

import Classes.Sonumeros;

import static Formularios.FrmVisMusicas.txtpmusica;

import java.awt.Color;

import java.awt.Image;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.ScheduledThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

import java.util.logging.Level;

import java.util.logging.Logger;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.swing.ImageIcon;

import javax.swing.JTextField;

import javax.swing.text.BadLocationException;

import javax.swing.text.DefaultHighlighter;
class Cifra {

final int numeroDaLinha;     // OBS: declaro a variável      numeroDaLinha   dentro da classe Cifra

final String name;

final int inicio;

final int fim;

Cifra(String name, int inicio, int fim, int numeroDaLinha) {     //OBS : Uso a variavel declarada

this.name = name;

this.inicio = inicio;

this.fim = fim;

this.numeroDaLinha = numeroDaLinha;

}

}

public class FrmMusicaPlay extends javax.swing.JInternalFrame {

String caminhoDasMusicas = C:\MUSIC PLAY\MusicasTeclado\”; // OBS: Diretório das musicas

String caminhoDasNotas = C://MUSIC PLAY//NotasTeclado//”;      // OBS: Diretório das notas

String flag;

int cont;

boolean clicado;

Pattern p = Pattern.compile("[ABCDEFGabcdefgMm()[telefone removido]/_dim#b°º+]+");

List cifras = new ArrayList<>();

static int current = 0;    //  OBS :esta variável é para contar o numero das notas lidas, funcionando.

Cifra c;

private Object e;

public FrmMusicaPlay() {

initComponents();

final JTextField ftf = txttempo;     // coloca um setfocus no JTextField (txttempo)

javax.swing.SwingUtilities.invokeLater(ftf::requestFocusInWindow);

txttempo.setDocument(new Sonumeros());

try {

List lines = new ArrayList<>();

BufferedReader ler = new BufferedReader(new InputStreamReader(

new FileInputStream(caminhoDasMusicas + txtpmusica.getText() + .txt), UTF-8));

String lin = ler.readLine();

int offset = 0;

int line = 0;

int i = 0;

while (lin != null) {

lines.add(lin);

if (line % 2 == 0) {

Matcher m = p.matcher(lin);

while (m.find()) {

cifras.add(new Cifra(m.group(), m.start() + offset, m.end() + offset , line));

}

}

offset += lin.length() + 1;

i++;

line++;

lin = ler.readLine();

}

txtareamus.setText(String.join("\n", lines));

} catch (Exception e) {

System.out.println("erroo na leitura: " + e.getMessage());

}

txtareamus.setCaretPosition(0);

}

@SuppressWarnings(unchecked)

// 

private void initComponents() {

//Comandos feito pelo Netbens quando criei a tela e seus elementos //////////////////////////////////

Btnsair = new javax.swing.JButton();

btniniciar = new javax.swing.JButton();

lblnota = new javax.swing.JLabel();

jLabel1 = new javax.swing.JLabel();

jLabel10 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

txtposicao = new javax.swing.JTextField();

txttempo = new javax.swing.JTextField();

jLabel3 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane();

txtareamus = new javax.swing.JTextPane();
Btnsair.setFont(new java.awt.Font("Arial", 1, 18)); // NOI18N
    Btnsair.setForeground(java.awt.Color.red);
    Btnsair.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagem/Sai_Peq.png"))); // 
    NOI18N
    Btnsair.setText("Sair");
    Btnsair.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            BtnsairActionPerformed(evt);
        }
    });
    btniniciar.setFont(new java.awt.Font("Arial", 1, 22)); // NOI18N
    btniniciar.setForeground(java.awt.Color.blue);
    btniniciar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagem/musica.png"))); // NOI18N
    btniniciar.setText("Iniciar");
    btniniciar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btniniciarActionPerformed(evt);
        }
    });
    lblnota.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.red, 2));
    jLabel1.setFont(new java.awt.Font("Arial", 1, 22)); // NOI18N
    jLabel1.setForeground(java.awt.Color.blue);
    jLabel1.setText("Nota :");
    jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jLabel1MouseClicked(evt);
        }
    });
    jLabel10.setFont(new java.awt.Font("Arial", 1, 24)); // NOI18N
    jLabel10.setForeground(java.awt.Color.red);
    jLabel10.setText("TOCAR  MÚSICAS");
    jLabel2.setFont(new java.awt.Font("Arial", 1, 18)); // NOI18N
    jLabel2.setForeground(java.awt.Color.blue);
    jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagem/dj_peq.png"))); // NOI18N
    jLabel2.setText("Música :");
    txtposicao.setFont(new java.awt.Font("Arial", 1, 36)); // NOI18N
    txtposicao.setForeground(java.awt.Color.red);
    txttempo.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
    jLabel3.setFont(new java.awt.Font("Arial", 1, 18)); // NOI18N
    jLabel3.setForeground(java.awt.Color.red);
    jLabel3.setText("Tempo da Música (Seg)");
    txtareamus.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.red, 2));
    txtareamus.setFont(new java.awt.Font("Arial", 1, 20)); // NOI18N
    txtareamus.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseEntered(java.awt.event.MouseEvent evt) {
            txtareamusMouseEntered(evt);
        }
        public void mousePressed(java.awt.event.MouseEvent evt) {
            txtareamusMousePressed(evt);
        }
    });
    jScrollPane1.setViewportView(txtareamus);
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jLabel2)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 825, 
           javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jLabel10)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 
       javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel1)
                            .addGap(18, 18, 18)
                            .addComponent(txtposicao, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(132, Short.MAX_VALUE))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                    .addGap(515, 515, 515)
                                    .addComponent(Btnsair))
                                .addComponent(lblnota, javax.swing.GroupLayout.PREFERRED_SIZE, 602, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addContainerGap(20, Short.MAX_VALUE))))
                .addGroup(layout.createSequentialGroup()
                    .addGap(238, 238, 238)
                    .addComponent(btniniciar, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(28, 248, Short.MAX_VALUE))
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(78, 78, 78)
                            .addComponent(txttempo, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(jLabel3))
                    .addGap(217, 217, 217))))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(29, 29, 29)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel1)
                        .addComponent(txtposicao, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(35, 35, 35)
                    .addComponent(lblnota, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(47, 47, 47)
                    .addComponent(jLabel3)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(txttempo, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 48, Short.MAX_VALUE)
                    .addComponent(btniniciar, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(53, 53, 53)
                    .addComponent(Btnsair))
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(jLabel2))
                        .addComponent(jLabel10))
                    .addGap(18, 18, 18)
                    .addComponent(jScrollPane1)))
            .addContainerGap())
    );

    setBounds(3, 0, 1499, 723);
}// </editor-fold>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {

txttempo.setText(0);

executor.shutdownNow();  // esta linha seria para parar a execução do programa e voltar ao form

anterior, mas não esta funcionando

this.dispose();

}

boolean isRunning = false;

ScheduledThreadPoolExecutor executor;

private void btniniciarActionPerformed(java.awt.event.ActionEvent evt) {

if (isRunning) {

executor.shutdown();

isRunning = false;

}

executor = new ScheduledThreadPoolExecutor(1);

isRunning = true;

executor.scheduleAtFixedRate(() -> {

c = cifras.get(current);

//Na linha de baixo dá erro !

if (c.numeroDaLinha=27){ // OBS: Vejo se estou na linha 27  , coloquei este comando na linha e

deu erro       Cannot assingn a value to final variable numeroDaLinha "

//Aqui começo a descer com a Barra de Rolagem 1° na linha 27, depois 53 e etc…

System.out.printf(“Entrei aqui 28”);

txtareamus.setCaretPosition(1500);

}else if (c.numeroDaLinha=54){

txtareamus.setCaretPosition(1900);

System.out.printf(“Entrei Aqui  53”);

} else if  (c.numeroDaLinha=81){

txtareamus.setCaretPosition(3100);

System.out.printf(“Entrei aqui81”);

}

try {

txtareamus.getHighlighter().removeAllHighlights();

txtareamus.getHighlighter().addHighlight(c.inicio, c.fim,

new DefaultHighlighter.DefaultHighlightPainter(Color.cyan));

} catch (BadLocationException ex) {

Logger.getLogger(FrmMusicaPlay.class.getName()).log(Level.SEVERE, null, ex);

}

String nova = c.name.replace(”/", _);

txtposicao.setText(nova);

ImageIcon imageIcon = new ImageIcon(new ImageIcon(caminhoDasNotas +

txtposicao.getText() + .jpg).getImage().getScaledInstance(599, 243,

Image.SCALE_DEFAULT));

lblnota.setIcon(imageIcon);

}

current++;

}, 0, Integer.parseInt(txttempo.getText()), TimeUnit.SECONDS);

String selecionado = txtareamus.getSelectedText();
}                                          
private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {                                     
    //não usado
}                                    
private void txtareamusMousePressed(java.awt.event.MouseEvent evt) {                                        
    String selecionado = txtareamus.getSelectedText();
    txtposicao.setText(selecionado);
    ImageIcon imageIcon = new ImageIcon(new ImageIcon("C://MUSIC PLAY//NotasTeclado//"+ 
   txtposicao.getText()+ ".jpg").getImage().getScaledInstance(599,243,Image.SCALE_DEFAULT));
    lblnota.setIcon(imageIcon);
}                                       
private void txtareamusMouseEntered(java.awt.event.MouseEvent evt) {                                        
    //não usado
}                                       
 
// Variables declaration - do not modify                     
private javax.swing.JButton Btnsair;
private javax.swing.JButton btniniciar;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblnota;
private javax.swing.JTextPane txtareamus;
private javax.swing.JTextField txtposicao;
public javax.swing.JTextField txttempo;
// End of variables declaration

}

Sei que a linha onde tento pegar em que linha , não posso usar esse tipo de variável, então, como seria ? Agradeço muito as ajuda.

Obrigado.

16 Respostas

darlan_machado

Isso está em um arquivo txt? se está, você, teoricamente, leria da linha 0 até a enésima linha;
Como não consegue, a partir do contador, saber em que linha está?

F

Amigo, Darlan, bom dia,

Obrigado pela pronta resposta, Como não consegue, a partir do contador, saber em que linha está ? Por isso escrevi pedindo ajuda, se vc sabe, poderia me ajudar ??? Porque eu não sei ! ! !
O problema esta na hora que clico no botão iniciar (txtiniciar), de acordo com o código feito, eu não faço nenhuma leitura de linha e sim de notas seguenciais, conforme se pode ver no código, será que vc pode me dar uma ajuda ??? Ficaria muito grato.
Armando

F

ah, esquci de mencionar, sim, isto é um arquivo .txt (é uma musica cifrada) conforme mostro abaixo;

C Am7 Em7 Dm7/9
Introdução
C7+ Bm7 Am7
Mais um ano se passou
Em7 Dm7 F7+ G7(9)
E nem sequer ouvi falar seu nome, a lua e eu

Quando clico no botão txtiniciar, o programa lê somente as notas, neste momento ele lê as notas em seguencia e não tem como eu criar um contador de linhas lidas, porque o texto já esta em um JtextPane, peço a sua ajuda de como resolver este problema.

Obrigado.

darlan_machado

Me mostra o trecho onde ele lê as notas sequenciais, pois isso é algo novo pra mim. Afinal, até onde eu sabia, o java lê a linha e processa-a.

staroski

Poxa, já está a meses no fórum e ainda não aprendeu a formatar o código que posta? :frowning:
Do jeito que está nem adianta tentar copiar e colar pois não vai compilar.

F

Amigo, sim, concordo contigo, o Java lê a linha e processa-a, só que isso é feito quando a página (form) é aberto, mas quando eu clico no botão txtiniciar, o programa que já esta com o texto na tela, lê somente as notas sequêncialmente e não lê nenhuma linha nesta hora, conforme eu vou te mostrar no código abaixo.

private void btniniciarActionPerformed(java.awt.event.ActionEvent evt) {  //clico aqui no botão txtiniciar

// Aqui o programa começa a ler as notas musicais,  as notas musicais e as mostram em uma Label

if (isRunning) {

executor.shutdown();

isRunning = false;

}

executor = new ScheduledThreadPoolExecutor(1);

isRunning = true;

executor.scheduleAtFixedRate(() -> {

c = cifras.get(current);   Estou pegando a variável CURRENT para usa-la em um IF, so que esta

variável me  o numero de notas lidas, não as linhas.

// if (c.numeroDaLinha=21){
// tentei isso, mas esta dando erro conforme eu informei acima na variével que usei
  // }
    try {
            txtareamus.getHighlighter().removeAllHighlights();    //Conforme o programa lê a nota 
             musical, ele coloca um Highlight sobre a nota.
            txtareamus.getHighlighter().addHighlight(c.inicio, c.fim,
            new DefaultHighlighter.DefaultHighlightPainter(Color.cyan));  //O Highlight é na cor cyan
        } catch (BadLocationException ex) {
            Logger.getLogger(FrmMusicaPlay.class.getName()).log(Level.SEVERE, null, ex);
        }
    String nova = c.name.replace("/", "_");  //Caso o nome da nota musical  tenha _ eu substituo por /
        txtposicao.setText(nova);
        ImageIcon imageIcon = new ImageIcon(new ImageIcon(caminhoDasNotas + 
         txtposicao.getText() + ".jpg").getImage().getScaledInstance(599, 243, 
        Image.SCALE_DEFAULT));
        lblnota.setIcon(imageIcon);   //Aqui coloco a imagem da nota em uma label
         current++;    //Olha aqui o current de novo sendo adicionado mais uma NOTA lida.

         //Aqui começo a descer com a Barra de Rolagem 1° depois da nota n° 21, depois n°41 e etc...
           mas não é isso que eu quero, eu quero descer a barra, de acordo com a linha que estou.
         if(current == 21) {  // volto a dizer, current é uma váriavel que contem quant de notas lidas, não 
                                          de linhas lidas. Isso não me serve.
             int tam = txtareamus.getText().length();
             txtareamus.setCaretPosition(tam/2);
             System.out.println("Entrei aqui 21");
          }else if (current == 41){ 
             int tam2 = txtareamus.getText().length();
             txtareamus.setCaretPosition(tam2);
             //System.out.println("Entrei Aqui  41");


     //OBS : O que eu fiz aqui com quant de notas, quero fazer com linha, exemplo, estou lendo a 
                   linha 21, caso isso seja verdadeiro quero que a barra de rolagem desça até a metade 
                    do cursor dela, se estiver na linha 41 , desça mais um pouco e se estiver na linha 81, 
                    desça até o final do seu cursor.
         }
      }, 0, Integer.parseInt(txttempo.getText()), TimeUnit.SECONDS);
       String selecionado = txtareamus.getSelectedText(); 

}

É isso ai meu amigo, parece simples, mais eu não sei a linha que o programa esta lendo para aplicar o IF e fazer a Barra de Rolagem descer. Será que fui claro ??? Sou dificil de me fazer entender.

Traduzindo melhor, no código quando clico no botão txtiniciar , dentro deste código, quero saber quando o programa esta lendo a linha, 21, 41, 61 e etc, para que eu com um IF possa fazer a Barra de rolagem ir descendo automaticamente.

Obrigado por ter pego este desafio, mas sei que esta dificil, conto com a sua ajuda.

Armando.

staroski

Primeiro faça o seguinte:

  1. Edite os suas mensagens;
  2. selecione o código java
  3. Clique no botão </>
  4. Salve as alterações.

Faz isso por favor, pois é inviável analisar seu código do jeito que você posta.

rodriguesabner

Isso já não tinha sido solucionado???

F

Ricardo, meu amigo, grande abç.

Mas não foi isso que eu fiz ?????????? 

   1. Edite as suas mensagens (Expliquei o meu problema);
   2. selecione o código java. (Mandei o meu código Java)
identar texto pré-formatado por 4 espaços

O resto que mandei, foi feito a pedido da pessoa que estava analisando o problema, desculpa mas não entendi, agora além de estar estudando Java, ter muitasssss duvidas, ainda não sei como pedir ajuda, peço que vc explique melhor como devo mandar as minhas dúvidas, pensava que estava fazendo o certo…

Obrigado.

F

Amigo, Orochimaru, boa tarde ???

Como vc disse, perfeito, a barra de rolagem foi resolvido sim, pelo Abner e sou muito grato a ele, mas o problema agora, conforme eu disse várias vezes acima, não é de Barra de rolagem, inclusive até o titulo do meu problema é diferente, o problema agora é de "Não consigo saber em que linha estou quando leio um texto", ah, já sei , o erro é sempre meu, esqueci que sou difícil de ser entendido, coisa de iniciante em uma linguagem, se vc prestar atenção vera que o tópico é outro,  mesmo assim, obrigado por tudo.

Armando

staroski

Não, veja como duas mensagens aparecem no texto.

Você está simplesmente colando o código Java e esquecendo de formatar ele com o botão de texto pré formatado.

Veja o exemplo abaixo, você posta código assim, sem formatar:

import qualquer.coisa.*;

public class Exemplo {

int atributoQualquer;

void métodoQualquer(){

// Mais código

}

}

Se você selecionar o código Java acima e clicar no botão de texto pré formatado, ele vai ficar todo bonitinho e fácil de ler, veja:

import qualquer.coisa.*;

public class Exemplo {

  int atributoQualquer;

  void métodoQualquer(){
    // Mais código
  }
}

Qual dos dois exemplos acima é mais legível aqui no fórum?

F

Amigo Ricardo , bom dia.

Não sabia deste detalhe, sim, eu copio o código e coloco na pagina do Guj, verifiquei que ao fazer isso o código e modificado e aparece identado a esquerda, não sabia que teria que dar um clicar no “botão de texto pré formatado”, ainda não sei que botão é esse e como fazer, mas procurarei ver.

Um grande abç e desculpa o meu erro, vivendo e aprendendo.

Obrigado pela dica,

Armando

rodriguesabner

Tutorial:


Manda apenas o método que vc lê as linhas, não precisa mandar o código todo

staroski

Você tem uma lista de objetos do tipo Cifra.
Cada cifra tem um atributo numeroDaLinha.
Ao invés de usar um JEditorPane, eu usaria um JList ou um JTable para renderizar essa lista de Cifra.
Aí você consegue obter o objeto Cifra selecionado e ler o atributo numeroDaLinha dele.

F

Abner, boa tarde,

Ok , desculpa mais uma vez, se é que entendi, primeiro eu copio o código e depois clico no botão
texto pre-formatado (CTRL+ SHIFT+ C) e envio, é isso ? Se esta certo, farei de agora em diante.

Quanto ao problema de verificar em que linha estou, já resolvi por aqui, fiz o que o Ricardo falou sobre a lista de objeto do tipo cifra e inclui um 'totalLin", agora estou sabendo em que linha o programa esta lendo e com isso posso manipular automaticamente a barra de Rolagem conforme eu quero.

OBS : Agora só tenho uma dúvida sobre , como parar a execução da leitura do texto, mas tarde passo mais detalhes e com o código identado direito.

Muito obrigado por tudo.

F

Ok, funcionou, cara vcs são 10.

Muito obrigado. fiquem com Deus e vlw !

Armando

Criado 18 de outubro de 2019
Ultima resposta 19 de out. de 2019
Respostas 16
Participantes 4