无法正确布局带有图形的按钮

时间:2019-05-22 20:05:41

标签: javafx javafx-8

我正在尝试在添加到Button的{​​{1}}中添加FlowPane,但是按钮都弄乱了(Figure 1)。有6个TitledPane和4个MenuButton

但是,如果我在按钮上添加一些文本,则它们的布局正确(Figure 2)。事情是:我不要文本...:(

很抱歉,我拉着其余的头发,试图弄清为什么 wth 运气不好。

代码如下:

Button

任何帮助/提示将不胜感激。谢谢。

旁注:

private void initLibraries() { libPanes = new ArrayList<>(); ButtonBase button; // Loop through all libraries for( ComponentLibrary lib : LibraryManager.get().getLibrairies() ) { ArrayList<ButtonBase> componentButtons = new ArrayList<>(); // Loop through all suppliers for( AbstractComponentSupplier<? extends SchematicComponent> supplier : lib.getSuppliers() ) { MenuItem[] items = supplier.getMenuItems(); if( items != null && items.length > 0 ) { button = new MenuButton(); ( (MenuButton) button ).getItems().addAll( supplier.getMenuItems() ); for( MenuItem item : items ) { item.setOnAction( e -> { // Creates a new component based on the menu selection SchematicView view = NanoShark.INSTANCE.getScene().getSchematicView(); if( view != null ) { SchematicSheet sheet = view.getSheet(); if( sheet != null && !sheet.hasPendingOperation() ) { view.requestFocus(); sheet.addComponent( supplier.newComponent( (MenuItem) e.getSource() ), true ); } } } ); } } else { button = new Button(); button.setOnAction( e -> { // Create a new component SchematicView view = NanoShark.INSTANCE.getScene().getSchematicView(); if( view != null ) { SchematicSheet sheet = view.getSheet(); if( sheet != null && !sheet.hasPendingOperation() ) { view.requestFocus(); sheet.addComponent( supplier.newComponent( null ), true ); } } } ); } if( supplier.getIcon() != null ) { button.setGraphic( new ImageView( supplier.getIcon() ) ); // *** The following does not work! // button.setContentDisplay( ContentDisplay.GRAPHIC_ONLY ); } // Works only if the following line is uncommented and the text is not null or "" // button.setText( supplier.getName(); button.setTooltip( supplier.getTooltip() ); componentButtons.add( button ); } // ** I did tried different layouts (VBox, StackPane, HBox) with the same results. FlowPane pane = new FlowPane(); pane.setAlignment( Pos.CENTER ); pane.setHgap( 5 ); pane.setVgap( 5 ); pane.getChildren().addAll( componentButtons ); pane.requestLayout(); libPanes.add( new TitledPane( lib.getName(), pane ) ); } } 位于默认类路径中(即在启动时已知),但是派生类是使用自定义AbstractComponentSupplier从外部Jar动态加载的,该自定义ClassLoader在运行时将其添加到类路径中。我怀疑这是问题的原因,因为当在按钮上添加一些文本时它可以工作,但是我认为这值得一提。

0 个答案:

没有答案