2012-04-09 81 views

回答

7

它不能根据this官方教程似乎。

格式化工具栏在 组件的实现中提供。您无法切换其可见性。但是,您仍然可以通过应用CSS样式自定义编辑器的外观...

11

如果使用不支持的方法,您可以非常容易地自定义工具栏。

正如他的回答Uluk状态,下面的方法不正式支持。

import java.util.regex.Pattern; 
import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.image.ImageView; 
import javafx.scene.web.HTMLEditor; 
import javafx.stage.Stage; 

public class HTMLEditorSample extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage stage) { 
    final HTMLEditor htmlEditor = new HTMLEditor(); 
    stage.setScene(new Scene(htmlEditor)); 
    stage.show(); 

    hideImageNodesMatching(htmlEditor, Pattern.compile(".*(Cut|Copy|Paste).*"), 0); 
    Node seperator = htmlEditor.lookup(".separator"); 
    seperator.setVisible(false); seperator.setManaged(false); 
    } 

    public void hideImageNodesMatching(Node node, Pattern imageNamePattern, int depth) { 
    if (node instanceof ImageView) { 
     ImageView imageView = (ImageView) node; 
     String url = imageView.getImage().impl_getUrl(); 
     if (url != null && imageNamePattern.matcher(url).matches()) { 
     Node button = imageView.getParent().getParent(); 
     button.setVisible(false); button.setManaged(false); 
     } 
    } 
    if (node instanceof Parent) 
     for (Node child : ((Parent) node).getChildrenUnmodifiable()) 
     hideImageNodesMatching(child, imageNamePattern, depth + 1); 
    } 
} 
+1

在JavaFX 8,可悲的是,这并不似乎工作。 – 2017-12-01 00:23:42

+0

@Brad Turek看到我的答案在这里:https://stackoverflow.com/a/48439161/2173392 – pdem 2018-01-25 09:20:37

6

如果有人真的想使用不支持的方法来隐藏工具栏则是实现这一目标(我没有测试过,如果这导致在HTML编辑控制的任何问题,所以在使用这种更简单的方法你个人风险)。

package htmleditorsample; 

import javafx.application.Application; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.web.HTMLEditor; 
import javafx.stage.Stage; 

public class HTMLEditorSample extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     final HTMLEditor htmlEditor = new HTMLEditor(); 
     primaryStage.setScene(new Scene(htmlEditor)); 
     primaryStage.show(); 

     for (Node toolBar = htmlEditor.lookup(".tool-bar"); toolBar != null; toolBar = htmlEditor.lookup(".tool-bar")) { 
      ((Pane) toolBar.getParent()).getChildren().remove(toolBar); 
     } 
    } 
} 
+0

当我试着你的代码(JavaFX 8),我得到了[这个NullPointerException](https://gist.github.com/ TurekBot/fe936bd51ac4c7d0dfd1586e7be02086)。 – 2017-12-01 00:17:32

0
.tool-bar 
{ 
    /*-fx-visibility:hidden; 
    -fx-display:none; */ 

    -fx-opacity: 0; 
} 

不透明性工作,但菜单保持活动状态。

6

我已经做了一些修改HTML编辑器的功能(以获得它的简约版本),也许别人可能也想使用它。

enter image description here

验证码:

import javafx.application.*; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.web.HTMLEditor; 
import javafx.stage.Stage; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Pane; 
import com.sun.javafx.scene.web.skin.PopupButton; 

public class HTMLEditorModifyer extends Application { 

     public static void main(String[] args) { launch(args); } 
     @Override public void start(Stage stage) { 
     final HTMLEditor htmlEditor = new HTMLEditor(); 
     stage.setScene(new Scene(htmlEditor)); 

     stage.setWidth(300); 
     stage.setHeight(200); 
     stage.show(); 

     addCustomToolBarTo(htmlEditor); 

     printChildren(htmlEditor, 20); 

     moveFromTo(htmlEditor, "PopupButton", 0, "ToolBar", 2); 
     moveFromTo(htmlEditor, "PopupButton", 1, "ToolBar", 2); 

     moveFromTo(htmlEditor, "Separator", 4, "ToolBar", 2); 
     moveFromTo(htmlEditor, "ComboBox", 2, "ToolBar", 2); 
     moveFromTo(htmlEditor, "Separator", 5, "ToolBar", 2); 

     moveFromTo(htmlEditor, "ToggleButton", 6, "ToolBar", 2); 
     moveFromTo(htmlEditor, "ToggleButton", 7, "ToolBar", 2); 
     moveFromTo(htmlEditor, "ToggleButton", 8, "ToolBar", 2); 

     removeFrom(htmlEditor, "ToolBar", 1); 
     removeFrom(htmlEditor, "ToolBar", 0); 

     //printChildren(htmlEditor, 20); 

     } 

     public void moveFromTo(HTMLEditor he, String t, int c, String t2, int c2) 
     { 
      Node nCb = new Button(); //just has to be sth. 

      //Copy From: 
      int i = 0; 
      switch(t) 
      { 
       case "PopupButton": 
        for (Node candidate: (he.lookupAll("PopupButton"))) 
        { 
        if (candidate instanceof PopupButton) 
        { 
         PopupButton cb = (PopupButton) candidate; 
         if (i == c) 
         { 
          nCb = cb; 
          break; 
         } 
        } 
        i++; 
        } 
        break; 
       case "Separator": 
        for (Node candidate: (he.lookupAll("Separator"))) 
        { 
        if (candidate instanceof Separator) 
        { 
         Separator cb = (Separator) candidate; 
         if (i == c) 
         { 
          nCb = cb; 
          break; 
         } 
        } 
        i++; 
        } 
        break; 
       case "ComboBox": 
        for (Node candidate: (he.lookupAll("ComboBox"))) 
        { 
        if (candidate instanceof ComboBox) 
        { 
         ComboBox cb = (ComboBox) candidate; 
         if (i == c) 
         { 
          nCb = cb; 
          break; 
         } 
        } 
        i++; 
        } 
        break;  
       case "ToggleButton": 
        for (Node candidate: (he.lookupAll("ToggleButton"))) 
        { 
        if (candidate instanceof ToggleButton) 
        { 
         ToggleButton cb = (ToggleButton) candidate; 
         if (i == c) 
         { 
          nCb = cb; 
          break; 
         } 
        } 
        i++; 
        } 
        break;  
      } 
      //Copy To: 
      i = 0; 
      switch(t2) 
      { 
       case "ToolBar": 
        for (Node candidate: (he.lookupAll("ToolBar"))) 
        { 
        if (candidate instanceof ToolBar) 
        { 
         ToolBar cb2 = (ToolBar) candidate; 
         if (i == c2) 
         { 
          cb2.getItems().add(nCb); 
          break; 
         } 
        } 
        i++; 
        } 
        break;  
      } 
     } 

     public void removeFrom(HTMLEditor he, String t, int c) 
     { 
      int i = 0; 

      switch(t) 
      { 
      case "ToolBar": 
       for (Node candidate: (he.lookupAll("ToolBar"))) 
       { 
       if (candidate instanceof ToolBar) 
       { 
        ToolBar cb = (ToolBar) candidate; 
        if (i == c) 
        { 
         Node nCb = cb; 
         ((Pane) nCb.getParent()).getChildren().remove(nCb); 
         break; 
        } 
       } 
       i++; 
       } 
       break; 
      case "PopupButton": 
       for (Node candidate: (he.lookupAll("PopupButton"))) 
       { 
        if (i == c) 
        { 
         Node nCb = candidate; 
         nCb.setVisible(false); nCb.setManaged(false); 
         break; 
        } 
        i++; 
       } 
       break; 
      case "ToggleButton": 
       for (Node candidate: (he.lookupAll("ToggleButton"))) 
       { 
       if (candidate instanceof ToggleButton) 
       { 
        ToggleButton cb = (ToggleButton) candidate; 
        if (i == c) 
        { 
         Node nCb = cb; 
         nCb.setVisible(false); nCb.setManaged(false); 
         break; 
        } 
       } 
       i++; 
       } 
       break; 
      case "Separator": 
       for (Node candidate: (he.lookupAll("Separator"))) 
       { 
       if (candidate instanceof Separator) 
       { 
        Separator cb = (Separator) candidate; 
        if (i == c) 
        { 
         Node nCb = cb; 
         nCb.setVisible(false); nCb.setManaged(false); 
         break; 
        } 
       } 
       i++; 
       } 
       break; 
      case "Button": 
       for (Node candidate: (he.lookupAll("Button"))) 
       { 
       if (candidate instanceof Button) 
       { 
        Button cb = (Button) candidate; 
        if (i == c) 
        { 
         Node nCb = cb; 
         nCb.setVisible(false); nCb.setManaged(false); 
         break; 
        } 
       } 
       i++; 
       } 
       break; 
      case "ComboBox": 
       for (Node candidate: (he.lookupAll("ComboBox"))) 
       { 
       if (candidate instanceof ComboBox) 
       { 
        ComboBox cb = (ComboBox) candidate; 
        if (i == c) 
        { 
         Node nCb = cb; 
         nCb.setVisible(false); nCb.setManaged(false); 
         break; 
        } 
       } 
       i++; 
       } 
       break; 
      } 
     } 

     public void printChildren(HTMLEditor he, int MAXDEPTH) 
     { 
      System.out.println("Print Children ==========>>>>"); 
      String[] hieraArray = new String[MAXDEPTH]; 
      int maxDepth = 0; 
      int lastDepth = 0; 
      Node parent; 

      /* List all elements of the HTMLeditor */ 
      for (Node element: (he.lookupAll("*"))) 
      { 
       parent = element.getParent(); 
       if (maxDepth == 0) 
       { 
        hieraArray[0] = element.getClass().getSimpleName().toString(); 
        System.out.print(hieraArray[0]); 
        System.out.println(""); 
        maxDepth = 1;     
       } 
       else 
       { 
        int i = 0, i2 = 0; 
        boolean found = false; 
        for(i=maxDepth; i>=0; i--) 
        { 
         if (hieraArray[i] == null || parent.getClass().getSimpleName() == null) continue; 
         if (hieraArray[i].equals(parent.getClass().getSimpleName())) 
         { 
          for (i2 = 0; i2 <= i; i2++) 
          { 
           System.out.print("|"); 
          } 
          if ((Math.abs(lastDepth-i2)) > 2) System.out.print("->" + element.getClass().getSimpleName() + " {p: " + parent.getClass().getSimpleName() + "}"); 
          else System.out.print("->" + element.getClass().getSimpleName()); 
          //if (element.getClass().getSimpleName().equals("PopupButton")) System.out.print(" ??: " + element + " ::: " + element.getClass()); 
          lastDepth = i2; 

          hieraArray[(i+1)] = element.getClass().getSimpleName(); 
          if (maxDepth < (i+1)) maxDepth = (i+1); 
          found = true; 
          System.out.println(""); 
          break; 
         } 
        } 
        if (found == false) 
        { 
         hieraArray[(i+1)] = parent.getClass().getSimpleName(); 
         if (maxDepth < (i+1)) maxDepth = (i+1); 
        } 
        if ((maxDepth+1) >= MAXDEPTH) 
        { 
         System.out.println("MAXDEPTH reached! increase ArraySize!"); 
         return; 
        } 
       } 
      } 


     } 

     public ToolBar addCustomToolBarTo(HTMLEditor he) 
     { 
      /* Thers one GridPane to the HTMLEditor where we add the ToolBar */ 
      ToolBar customTB = new ToolBar(); 
      for (Node candidate: (he.lookupAll("GridPane"))) 
      { 
      if (candidate instanceof GridPane) 
      { 
       ((GridPane) candidate).getChildren().add(customTB); 
       break; 
      } 
      } 
      return customTB; 
     }  
} 
+0

不为我工作 – Developer66 2017-09-04 08:38:17

7
public static void hideHTMLEditorToolbars(final HTMLEditor editor) 
{ 
    editor.setVisible(false); 
    Platform.runLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      Node[] nodes = editor.lookupAll(".tool-bar").toArray(new Node[0]); 
      for(Node node : nodes) 
      { 
       node.setVisible(false); 
       node.setManaged(false); 
      } 
      editor.setVisible(true); 
     } 
    }); 
} 
+0

这一个好,因为你[甚至不能告诉(https://i.imgur.com/pNOXUGS.png)工具栏在那里一次。 – 2017-12-01 00:20:47

1

您应该能够从它的工具栏隐藏按钮,甚至是删除它们。

我会做这种方式:

final Map map = new HashMap(); 
 
for (Node candidate: (htmlEditor.lookupAll("ToolBar"))) { 
 
    List list = ((ToolBar) candidate).getItems(); 
 
    for (int i = 0; i < list.size(); i++) { 
 
    Node b = (Node) list.get(i); 
 
    map.put(map.size() + 1, b); 
 
    } 
 
} 
 

 
// So we've fetch all buttons (including separators) and assigned 
 
// each an index number. Now then to hide an item: 
 

 
((Node) map.get(2)).setVisible(false); // Hides copy button 
 
((Node) map.get(13)).setVisible(false); // Hides bullets button 
 

 
// Or to just completely remove them: 
 

 
map.remove(18); // Removes font-menu-button 
 
map.remove(25); // Removes editor-strike button

0

试试这个:

.html-editor .top-toolbar 
 
{ 
 
     -fx-max-width: 0px; 
 
\t -fx-min-width: 0px; 
 
\t -fx-pref-width: 0px; 
 
\t -fx-max-height: 0px; 
 
\t -fx-min-height: 0px; 
 
\t -fx-pref-height: 0px; 
 
     -fx-opacity: 0; 
 
} 
 
.html-editor .bottom-toolbar 
 
{ 
 
     -fx-max-width: 0px; 
 
\t -fx-min-width: 0px; 
 
\t -fx-pref-width: 0px; 
 
\t -fx-max-height: 0px; 
 
\t -fx-min-height: 0px; 
 
\t -fx-pref-height: 0px; 
 
     -fx-opacity: 0; 
 
}