2012-06-29 4 views
3

JavaFX 'HTMLEditor 구성 요소를 사용하여 일부 실험을 시도했습니다. 다음 코드 (발췌) 사용 : 그것은 좋은 지금까지 한 가지 중요한 예외와 작동JavaFX HMTLEditor가 'return'키에 반응하지 않습니다.

fxPanel=new JFXPanel(); 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      Group group = new Group(); 
      scene = new Scene(group);    
      fxPanel.setScene(scene); 
      view = VBoxBuilder.create().build(); 

      group.getChildren().add(view); 


      edit = HTMLEditorBuilder.create().build(); 
      // toolPane = TabPaneBuilder.create().minHeight(60d).build(); 
      //toolPane.getTabs().add(new Tab("Allgemein")); 

      view.getChildren().add(edit); 

     } 
    }); 

    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      jPanel1.add(fxPanel); 
     } 
    }); 

을 - 나는 BR의 리턴 키를 사용할 수 없습니다 - 그냥 무시하는 것 같다. 이 키에는 전혀 반응이 없습니다. 내가 볼 수있는 한, 다른 키는 예상대로 작동합니다.

답변

9

아무런 문제가 없습니다. 그래서 나는 KeyListener을 JFXPanel에 넣고 KeyChar을 10에서 13으로 변경하고 이벤트를 시스템 이벤트 대기열에 다시 게시하여이 문제를 해결했습니다. HTMLEditor가 ENTERCTRL-M에 모두 응답하기 시작하면 나중에 의도 한대로 작동하지 않을 수 있습니다.

fxPanel.addKeyListener(new KeyListener() { 

    public void keyTyped(KeyEvent e) { 
     if (e.getKeyChar() == 10) { 
      e.setKeyChar((char) 13); 
      Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(e); 
     } 
    } 

    public void keyPressed(KeyEvent e) {} 

    public void keyReleased(KeyEvent e) {} 
}); 

누구나 지금 더 좋은 아이디어가 있습니까?

편집 : 내가 원하는 효과를 얻을 수있는 다른 방법을 발견 한 것은과 같이 현재의 키보드 포커스 관리자에서 사용자 정의 KeyEventDispatcher를 설치하는 것입니다 :

KeyboardFocusManager kfm = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager(); 
kfm.addKeyEventDispatcher(new KeyEventDispatcher() { 
    @Override 
    public boolean dispatchKeyEvent(KeyEvent e) { 
     if (DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == jfxPanel) { 
      if (e.getID() == KeyEvent.KEY_TYPED && e.getKeyChar() == 10) { 
       e.setKeyChar((char) 13); 
      } 
     } 
     return false; 
    } 
}); 

이 원래 KeyEvent을 변경하기보다는 장점이 있습니다 이후에 새로운 메시지를 게시하면 HTMLEditor에 응답하기 시작한 경우 이벤트를 입력하면 두 배가되지 않습니다.

+0

이것은 대단합니다! 고맙습니다. – dajood

+1

물론 SHIFT -Enter는 이제
**와 새로운 단락을 삽입합니다 ... 여전히'Enter'를 사용할 수없는 것보다 훨씬 낫습니다. :) –

관련 문제