我正在尝试在添加到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
在运行时将其添加到类路径中。我怀疑这是问题的原因,因为当在按钮上添加一些文本时它可以工作,但是我认为这值得一提。