如何为RichTextBox设置样式?

时间:2012-08-11 08:20:24

标签: gwt ri

RichTextBox有这样的dom级别层次结构?

  <iframe>
    <html>
     <body>
     </body>
   </html>
 </iframe>

我发现iframe的设置样式名称不起作用,必须设置为body元素。 我尝试这样做(在构造函数中):


  Element body = ((FrameElement) getElement().cast()).getContentDocument().getBody();
  body.setClassName("richTextArea");

在这个boy元素上抛出了NullPointerException,甚至我将它们包装成这样:


  Scheduler.get().scheduleDeferred(new ScheduledCommand()
  {
     @Override
     public void execute()
     {
         Element body = ((FrameElement) getElement().cast()).getContentDocument().getBody();
         body.setClassName("richTextArea"); 
     }

  });

实际问题是RichTextBox在附加到它时变得奇怪 DOM,它的内部东西(html,body)没有生成,即使我将这些行包装成 onload()方法,NPE有时被抛出,但如果将它们包装到计时器中,则进行计划 相对较长的等待时间,没有NPE,但是你知道,我不能让某事取决于此 不可预测的“相对漫长的等待时间”。

任何人都可以提供解决方案吗?

1 个答案:

答案 0 :(得分:0)

您无法将主页面中定义的CSS规则应用于RichTextArea的内容。 您必须在RichTextArea创建的iframe中包含该样式。

以下是内联样式的简单示例:

RichTextArea richTextArea = new RichTextArea();
richTextArea.setSize("200px", "200px");
richTextArea.setHTML("<html><head><style type=\"text/css\">h1 {color: red}</style></head><body><h1>Title</h1><p>content...</p></body></html>");
RootPanel.get().add(richTextArea);

您还可以使用外部css文件。必须相应地调整设置为richTextEditor的html代码。