2017-04-11 3 views
0

J'ai ajouté un "Terminal" qui étend JInternalFrame dans mon JDesktopPane. constructeur terminal est commeComment rafraîchir un composant sur un JDesktopPane

public Terminal(Executable exec) 

où Executable est une interface qui contient la méthode abstraite elab, et je stocke cette instance dans une variable. alors quand j'appuie sur "OK", j'appelle la méthode exec.elab(String arg). Dans mon JDesktopPane j'ai créé un Terminal(new BasicCommands()). Après cette création, avec une commande, je veux changer l'instance de mon Terminal avec terminal.setExec(new AdvancedCommands()) où AdvancedCommands et BasicCommands sont une classe qui implémente une interface exécutable et qui contient leur propre méthode elab. Donc, quand je fais cela, je n'ai pas d'avertissements ou d'autres choses, mais quand je veux appeler terminal.setExec(new AdvancedCommands()) pour changer ma méthode elab, rien ne change ... Comment je peux le faire? J'ai essayé avec le terminal rafraîchissant (revalider et repeindre), mais rien ...

Comment j'ajouter keyListener en classe Terminal:

inputArea.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyReleased(KeyEvent arg0) { 
      if (arg0.getKeyCode()==KeyEvent.VK_ENTER){ 
       if(!inputArea.getText().isEmpty()){ 
        scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum()); 
        exec.elab(new Str(inputArea.getText())); //I want to change this method with ter.setExec(some class that implements Executable); 
        clearInputArea(); 
       } 
      } 
     } 
    }); 

Répondre

0

J'ai trouvé une solution qui fonctionne, mais je ne sais pas s'il y a d'autres mieux:

public void refresh(){ 
    revalidate(); 
    repaint(); 
    inputArea.removeKeyListener(ad); 
    ad = new KeyAdapter() { 
     @Override 
     public void keyReleased(KeyEvent arg0) { 
      if (arg0.getKeyCode()==KeyEvent.VK_ENTER){ 
       if(!inputArea.getText().isEmpty()){ 
        scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum()); 
        exec.elab(new Str(inputArea.getText())); 
        clearInputArea(); 
       } 
      } 
     } 
    }; 
    inputArea.addKeyListener(ad); 
} 

J'ai créé cette méthode où je supprime mon keylistener et l'ajoute à nouveau.