2012-06-22 88 views
1

我想創建一個JavaFX表格,該表格在一列的單元格中允許用戶編輯XHTML文本。我只需要非常基本的格式化功能,例如粗體,斜體,簡體中文。JavaFX 2.1包含WebView單元格的TableView

我已經設法通過使用我自己的TableCell的子類和每個單元格使用WebView(HTMLEditor當然是另一種選擇,但我的猜測是,對於我的要求,WebView應該是足夠的)。

但是,爲了讓用戶編輯更加舒適,我需要以下功能: 1.如果用戶輸入多行文本,則需要調整單元格高度。 2.上下文菜單(或者,如果不可能的話,還有一些其他菜單或按鈕)應該允許如上所述格式化單元格中的部分文本(粗體,斜體..)

有沒有人成功地實現類似?我在網上看到了一些建議,但他們很少包含代碼示例。

回答

0

我已經成功地做了類似的事情。
我想我可以分享一些讓我實現它的基本線索。

  1. 調整整個WebView的大小。爲此,整個WebView必須是可編輯的html頁面。您achive通過CONTENTEDITABLE設置爲true:

    <體CONTENTEDITABLE = '真' ID = '內容'> </BODY>

  2. 您可以在一個網頁視圖的上下文菜單。但這是一件棘手的事情,因爲您必須先禁用與其關聯的原始上下文菜單。

    WebView editView;

    ...

    此事件originalDispatcher = editView.getEventDispatcher(); editView.setEventDispatcher(new WebmenuEventDispatcher(originalDispatcher));

這是事件調度類:

public class WebmenuEventDispatcher implements EventDispatcher { 

     private EventDispatcher originalDispatcher; 

     public WebmenuEventDispatcher(EventDispatcher originalDispatcher) { 
      this.originalDispatcher = originalDispatcher; 
     } 

     @Override 
     public Event dispatchEvent(Event event, EventDispatchChain tail) { 
      if (event instanceof MouseEvent) { 
       MouseEvent mouseEvent = (MouseEvent) event; 
       if (MouseButton.SECONDARY == mouseEvent.getButton()) { 
        mouseEvent.consume(); 
        // Show our own menu 
        cmEdit.show(editView.getScene().getWindow(), mouseEvent.getScreenX(), mouseEvent.getScreenY()); 
       } 
      } 
      return originalDispatcher.dispatchEvent(event, tail); 
     } 
    } 

現在,從菜單中設置字體,你需要一個雙向的Java < - > JavaScript的橋樑,並在web視圖使用一些javascript側。

+0

Hi betaman。非常感謝您的評論,我會嘗試您的解決方案。當你打電話時,我仍然在與「Java<->javascript橋」掙扎。原則上,我知道如何執行Javascript以及如何從中訪問Java。但是我仍然對如何在WebView中訪問用戶輸入的大小以及相應地調整WebView的大小有點想法。 –

+0

也許你可以用javascript做到這一點,使用: window.innerWidth和window.innerHeight 在每個按鍵上檢測它們並將它們發送到您的Java應用程序以相應調整大小。不知道它是否會起作用,但值得一試。 – betaman

+0

您也可以嘗試:document.body.clientHeight和 document.body.clientWidth。告訴我,如果你讓它與這些任何工作。 – betaman

相關問題