2012-06-22 87 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

相关问题