JavaFX——问题与解决方法(不定期更新)

吐槽一下~都说JavaFX比Swing好。原生UI是好看,设计跟代码分离了看起来舒服了,但为啥网上有用的资料这么少呢,为啥有些UI设计还要在代码中交代呢。想想都头疼。下面是我在用JavaFX过程中遇到的网上找不到答案的问题,希望能帮助遇到同款问题的亲们。

问题1: 

在JavaFX Scene Builder的页面中明明没有间隙,但实际运行时却有间隙,怎么设计都没用。一般组件倒还好,本身需要与边框留有空间,但你给菜单栏(Menu)留这么大的空白间距是想干嘛?!

 解决方法:

只能通过代码去解决。首先在FXML中给菜单栏设置 fx:id=menu ,然后在控制器(MenuController)中将它的作用域设置成 public 

@FXML
public MenuBar menu;    // 方便后面的调用

 最后,在开始调用布局的时候设置menu的宽度:

javafx.fxml.FXMLLoader loader = new javafx.fxml.FXMLLoader(getClass().getResource("ui/Menu.fxml"));
stage.show();    // 先显示再设置。根据显示的实际宽度进行设置的
// 将菜单栏的宽度设置为与窗体宽度相等,间隙就没有了
((MenuController)loader.getController()).menu.setPrefWidth(stage.getWidth());

问题2:

网上对于设置菜单(Menu)、菜单项 (MenuItem)图标的方式都是通过代码,其实可以在FXML中通过 graphic 标签设置图标(图片尺寸最好是16x16):

  <Menu mnemonicParsing="false" text="更新">
    <graphic>
        <ImageView>
            <Image url="@img/update.png" />
        </ImageView>
    </graphic>
    <items>
        <MenuItem mnemonicParsing="false" onAction="#update" text="项目">
           <graphic>
                <ImageView>
                    <Image url="@img/project.png" />
                </ImageView>
           </graphic>
        </MenuItem>
        <SeparatorMenuItem mnemonicParsing="false" />
        <MenuItem mnemonicParsing="false" onAction="#update" text="模块" >
            <graphic>
                <ImageView>
                    <Image url="@img/module.png" />
                </ImageView>
            </graphic>
        </MenuItem>
    </items>
  </Menu>

效果图:

猜你喜欢

转载自blog.csdn.net/qq_30917141/article/details/129623850