2017-04-11 30 views
0

我已經添加了一個將JInternalFrame擴展到我的JDesktopPane中的「終端」。終端的構造是一樣如何刷新JDesktopPane上的組件

public Terminal(Executable exec) 

其中可執行是包含抽象方法ELAB的接口,以及I的實例存儲到一個變量。所以當我按「確定」時,我打電話給exec.elab(String arg)方法。進入我的JDesktopPane,我創建了一個Terminal(new BasicCommands())。創建完成後,使用命令,我想更改我的終端實例,其中AdvancedCommands和BasicCommands是實現可執行接口的類,並且包含它們自己的elab方法。所以當我這樣做時,我沒有任何警告或其他的東西,但是當我想打電話給terminal.setExec(new AdvancedCommands())來改變我的elab方法時,沒有什麼改變......我該怎麼做呢?我試圖刷新終端(重新驗證並重新繪製),但不...

我怎麼加的KeyListener在終端類:

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

回答

0

我發現一個可行的解決方案,但我不知道是否有其他更好:

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

我已經創建了此方法,我刪除了我的keylistener並再次添加。