JavaFx界面控件宽度随父元素宽度动态变化

是这样的,在学习JavaFx的时候,MenuBar组件,宽度设置到和窗口一样宽度,但是一缩放程序窗口大小,MenuBar的大小为固定值,所以就出现空白区域,影响美观,找了好多资料找到解决办法,其实也简单

其他UI组件应该也可以使用相同的方法,就没有一个个去尝试了

解决问题原文章地址

Controller代码(重点就那一行代码)

package com.share.spider.controller;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.MenuBar;
import javafx.scene.layout.Pane;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private Pane pane;
    @FXML
    private MenuBar menuBar;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        menuBar.prefWidthProperty().bind(pane.widthProperty());//宽度绑定为Pane宽度
    }
}

FXML代码









   
      
        
          
            
              
            
          
          
            
              
            
          
          
            
              
            
          
        
      
   

Main代码

package com.share.spider;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.net.URL;

public class Main extends Application {
    public static void main( String[] args )
    {
        launch(args);
    }
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("fxml/Main.fxml"));//getClass().getClassLoader().getResource() 和 getClass().getResource()的区别,在不在根目录下
        primaryStage.setTitle("****");
        primaryStage.setScene(new Scene(root, 1000, 600));
        primaryStage.setResizable(true);//窗体缩放(默认为true)
        primaryStage.show();
    }
}

其实熟悉JavaFx开发的只需要看Controller代码就可以了,重点就那一行代码

你可能感兴趣的:(JavaFx)