2017-04-11 3 views
0

Ich habe ein "Terminal" hinzugefügt, die JInternalFrame in meine JDesktopPane erweitert. Terminal Konstruktor ist wieSo aktualisieren Sie eine Komponente auf einem JDesktopPane

public Terminal(Executable exec) 

wo Executable ist eine Schnittstelle, die die abstrakte Methode ELAB enthält, und ich speichern diese Instanz in eine Variable. Wenn ich also "OK" drücke, rufe ich exec.elab(String arg) an. In meinem JDesktopPane habe ich einen Terminal(new BasicCommands()) erstellt. Nach dieser Erstellung möchte ich mit einem Befehl die Instanz meines Terminals mit terminal.setExec(new AdvancedCommands()) ändern, wobei AdvancedCommands und BasicCommands eine Klasse sind, die eine ausführbare Schnittstelle implementiert und ihre eigene elab-Methode enthält. Also, wenn ich das tue, habe ich keine Warnungen oder andere Dinge, aber wenn ich terminal.setExec(new AdvancedCommands()) anrufen möchte, um meine elab Methode zu ändern, ändert sich nichts ... Wie kann ich es tun? Ich habe versucht, mit erfrischenden Terminal (revalidate und neu streichen), aber nichts ...

Wie ich keyListener in Terminal-Klasse hinzufügen:

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(); 
       } 
      } 
     } 
    }); 

Antwort

0

ich eine Lösung gefunden, die funktioniert, aber ich weiß nicht, ob es andere besser:

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); 
} 

Ich habe diese Methode, wo ich meine Keylistener entfernen und fügen Sie das wieder.

Verwandte Themen