java – ¿Como puedo controlar la ubicación del cursor en un JEditorPane?

Hola estoy creando un compilador, tengo problemas para enumerar las líneas de código que se están escribiendo,les dejo una parte de mi código:

    public class Compilador extends JFrame{
    
    private JPanel panel;
    private JEditorPane editor;
    protected static JTextArea salida;
    private JScrollPane barraEditor, barraSalida;
    private String palabras;
    protected static String resultados;
    private int nlineas;
   
  
  
    public Compilador(){
        setSize(900,600);
        setTitle("Mi mini compilador");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(Compilador.EXIT_ON_CLOSE);
        setResizable(false);
        resultados="";
        nlineas=1;
        Panel();
    
    }
    
    private void Panel(){
        panel=new JPanel();
        panel.setLayout(null);
        panel.setBackground(Color.DARK_GRAY);
        getContentPane().add(panel);
      
    }
    
    
    
    private void AreasTexto_Etiquetas(){
        
        editor=new JEditorPane();
        editor.setFont(new Font("Arial Black",Font.PLAIN,14));
        editor.setForeground(Color.BLACK);
        editor.setBackground(Color.WHITE);
        editor.setText(nlineas+"      ");
        editor.setCaretPosition(6);
        System.out.println(editor.getCaretPosition());
       
       
        barraEditor=new JScrollPane(editor);
        barraEditor.setBounds(120,40,780,320);
        barraEditor.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        barraEditor.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
       
        
     
        salida=new JTextArea();
        salida.setFont(new Font("Arial Black",Font.BOLD,16));
        salida.setForeground(Color.BLACK);
        salida.setBackground(Color.WHITE);
        
        barraSalida=new JScrollPane(salida);
        barraSalida.setBounds(120,420,780,105);
        barraSalida.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        barraSalida.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        
        
        panel.add(barraEditor);
        panel.add(barraSalida);
       
      
        eventos();
    }
    
    private void eventos(){
        
      
       KeyListener escrito=new KeyListener(){
           @Override
           public void keyTyped(KeyEvent e) {
           }

           @Override
           public void keyPressed(KeyEvent e) {
              
           }

      
           @Override
           public void keyReleased(KeyEvent e) {
               
               if(e.getKeyChar()=='n'){
                   nlineas++;
                   editor.setText(editor.getText()+nlineas+"      ");
               }
          
               if(editor.getCaretPosition()<6){
                  
                  editor.setText(editor.getText()+" ");
                  editor.setCaretPosition(5);
                  
                  if(!editor.getText().substring(4,5).equals(" ")){
       
                editor.setCaretPosition(editor.getCaretPosition());
                  }
            
               }
              
               if(e.getKeyCode()==8 || e.getKeyCode()==37){
                   e.consume();
               }
           }
       };
       
       editor.addKeyListener(escrito);
       
       
    }
}

Como se darán cuenta en esta parte de código:

@Override
public void keyReleased(KeyEvent e) {

         if(e.getKeyChar()=='n'){
             nlineas++;
              editor.setText(editor.getText()+nlineas+"      ");
         }
  
       if(editor.getCaretPosition()<6){
          
          editor.setText(editor.getText()+" ");
          editor.setCaretPosition(5);
          
          if(!editor.getText().substring(4,5).equals(" ")){
              editor.setCaretPosition(editor.getCaretPosition());
          }
    
       }
      
       if(e.getKeyCode()==8 || e.getKeyCode()==37){
           e.consume();
       }
   }

};

Es dónde hasta el momento he logrado que cada vez que se da un salto de línea aumente el número de líneas utilizadas, además también he logrado evitar que se borren los números de líneas usadas, a excepción de cuando se mantiene presionado la tecla retroceso o la de flecha izquierda, a pesar de que las intente capturar con esta parte:

if(e.getKeyCode()==8 || e.getKeyCode()==37){
               e.consume();
           }

Otro problema, es que el usuario puede posicionar el cursor en cualquier parte del JEditorPane lo que podría ocasionar que pueda borrar el número de línea.

Esto me lleva a preguntar si, ¿hay alguna mejor manera de controlar la ubicación del cursor dentro del JEditorPane ? o en todo caso ¿hay alguna mejor manera de enumerar los números de línea que tenga el JEditorPane?

javascript – Controlar entrada de datos en un input por JS

Tengo una función en JS para controlar lo que el usuario puede o no introducir por teclado.
Ahora mismo llamo a esa función mediante un onkeypress de manera que cada vez que el usuario teclea en el input compruebo que es correcto.

Ahora tengo el problema de que si copia y pega un texto en ese input al no haber tecleado una tecla no se llama a la función, he probado con el onchange pero con el problema de que si copio y pego en ese input y directamente doy al botón submit no llama a la función.

¿Cual es la forma correcta para poder llamar a esa función en cualquier caso posible?

branch – Controlar código com SVN Tortoise

Tenho o seguinte ambiente:

projeto_principal
projeto_cliente_1
projeto_cliente_2
projeto_cliente_3

onde projeto_cliente 1, 2 e 3 são cópias de projeto_principal.

Nesses ambientes eu preciso deixar em “projeto_principal” apenas os códigos que são comuns a todos os projetos acima. E nos projeto_cliente 1, 2 e 3 códigos que são específicos.

Terá ocasiões em que farei alterações nos projeto_cliente 1, 2 e 3 que serão comuns a todos os projetos.

Ex: Se eu incluir ou alterar um arquivo em projeto_principal devo atualizar esses arquivos nos projetos_cliente 1, 2 e 3.

Se eu incluir ou alterar um arquivo em projeto_cliente 1, 2 ou 3 – cuja inclusão ou alteração seja válida pra todos os projetos – também devo atualizar os outros projetos

Alguém tem ideia de como fazer isso usando o SVN Tortoise?

angular – Controlar el cerrar la ventana o cambiar de componente

Tengo un formulario, el cual tiene un botón de guardar cambios, si el formulario es correcto el botón se pone activo, si el formulario no es correcto el botón se pone disabled, quiero que si el botón está activo y el usuario quiere navegar a otro componente o cerrar la pestaña del navegador le alerte ede guardar los cambios

<button class="btn btn-block btn-sm btn-success" [disabled]="f.invalid">Guardar cambios</button>

Alguna idea? He visto que con Javascript se puede controlar el cerrado de la pestaña, pero nada de los componentes