2017-04-11 13 views
0

JInternalFrame을 JDesktopPane으로 확장하는 "터미널"을 추가했습니다. 터미널 생성자는 다음과 같습니다.JDesktopPane의 구성 요소를 새로 고치는 방법

public Terminal(Executable exec) 

여기서 Executable은 추상 메서드 elab를 포함하는 인터페이스이며, 해당 인스턴스를 변수에 저장합니다. 그래서 "OK"를 누를 때 나는 exec.elab(String arg) 방법으로 전화한다. JDesktopPane에 Terminal(new BasicCommands())을 생성했습니다. 명령을 작성한 후, terminal.setExec(new AdvancedCommands())으로 터미널의 인스턴스를 변경하고 싶습니다. 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); 
} 

나는이 키 릴스터를 제거하고 다시 추가하는 방법을 만들었습니다.