JavaFX BorderPane布局

news2024/11/24 16:38:44

BorderPane布局顶部,底部,左,右或中心区域中的子节点。每个区域只能有一个节点。BorderPane的顶部和底部区域允许可调整大小的节点占用所有可用宽度。
左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。

默认情况下,所有边界区域尊重子节点的首选宽度和高度。放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:

  • 顶部: Pos.TOP_LEFT
  • 底部: Pos.BOTTOM_LEFT
  • 左侧: Pos.TOP_LEFT
  • 右侧: Pos.TOP_RIGHT
  • 中心: Pos.CENTER

示例1

将按钮添加到BorderPane,如下代码所示

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("BorderPane Test");
        BorderPane bp = new BorderPane();
        //bp.setPadding(new Insets(10, 20, 10, 20));
        
        Button btnTop = new Button("Top");
        bp.setTop(btnTop);
        
        Button btnLeft = new Button("Left");
        bp.setLeft(btnLeft);
        
        Button btnCenter = new Button("Center");
        bp.setCenter(btnCenter);
        
        Button btnRight = new Button("Right");
        bp.setRight(btnRight);
        
        Button btnBottom = new Button("Bottom");
        bp.setBottom(btnBottom);
        
        Scene scene = new Scene(bp, 300, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

示例2

package com.javafx03;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Background;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class JavaFx07 extends Application {
    @Override
    public void start(Stage stage) {

        BorderPane borderPane = new BorderPane();
        borderPane.setBackground(Background.fill(Color.GRAY));

        borderPane.setTop(new Button("TOP"));
        borderPane.setLeft(new Button("LEFT"));
        borderPane.setRight(new Button("RIGHT"));
        borderPane.setCenter(new Button("Center"));
        borderPane.setBottom(new Button("Bottom"));

        Scene scene = new Scene(borderPane,300,300);

        stage.setScene(scene);
        stage.show();
    }

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

复杂布局

package com.javafx03;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class JavaFx08 extends Application {
    @Override
    public void start(Stage stage) {

        BorderPane borderPane = new BorderPane();
        borderPane.setBackground(Background.fill(Color.GRAY));

        HBox top = new HBox();
        top.setBackground(Background.fill(Color.BLUE));
        top.setMinHeight(60);

        Text text = new Text("Welcome 进销存");
        text.setFont(Font.font("宋体", FontWeight.BOLD,20));
        top.setAlignment(Pos.CENTER);

        top.getChildren().add(text);
        borderPane.setTop(top);

        VBox left = new VBox(10);
        left.setPadding(new Insets(10));
        left.setBackground(Background.fill(Color.PINK));
        left.setMinWidth(100);
        Button system = new Button("系统设置");
        left.getChildren().addAll(system,new Button("商品管理"),new Button("关于我们"),new Button("联系我们"));

        borderPane.setLeft(left);

        GridPane gridPane = new GridPane();
        gridPane.setBackground(Background.fill(Color.RED));
        gridPane.setMinWidth(400);
        gridPane.setMinHeight(240);

        borderPane.setCenter(gridPane);
        //borderPane.setRight(new Button("RIGHT"));

        system.setOnAction(e->{
            gridPane.setBackground(Background.fill(Color.BLACK));
        });

        HBox buttom = new HBox(10);
        buttom.setPadding(new Insets(10));
        buttom.setAlignment(Pos.CENTER);

        buttom.getChildren().addAll(new Button("系统设置"),new Button("商品管理"),new Button("关于我们"),new Button("联系我们"));

        borderPane.setBottom(buttom);

        Scene scene = new Scene(borderPane,600,400);

        stage.setScene(scene);
        stage.show();
    }

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

此处为语雀视频卡片,点击链接查看:Video_2022-04-27_004131.wmv

菜单导航

使用场景绑定BorderPane宽度和高度

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {
    
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Title");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 250, Color.WHITE);
        
        MenuBar menuBar = new MenuBar();
        EventHandler<ActionEvent> action = changeTabPlacement();
        
        Menu menu = new Menu("Direction");
        MenuItem left = new MenuItem("Left");
        
        left.setOnAction(action);
        menu.getItems().add(left);
        
        MenuItem right = new MenuItem("Right");
        right.setOnAction(action);
        menu.getItems().add(right);
        
        MenuItem top = new MenuItem("Top");
        top.setOnAction(action);
        menu.getItems().add(top);
        
        MenuItem bottom = new MenuItem("Bottom");
        bottom.setOnAction(action);
        menu.getItems().add(bottom);
        
        menuBar.getMenus().add(menu);
        
        BorderPane borderPane = new BorderPane();
        
        borderPane.prefHeightProperty().bind(scene.heightProperty());
        borderPane.prefWidthProperty().bind(scene.widthProperty());
        
        borderPane.setTop(menuBar);
        
        root.getChildren().add(borderPane);
        
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    private EventHandler<ActionEvent> changeTabPlacement() {
        return new EventHandler<ActionEvent>() {
            
            public void handle(ActionEvent event) {
                MenuItem mItem = (MenuItem) event.getSource();
                String side = mItem.getText();
                if ("left".equalsIgnoreCase(side)) {
                    System.out.println("left");
                } else if ("right".equalsIgnoreCase(side)) {
                    System.out.println("right");
                } else if ("top".equalsIgnoreCase(side)) {
                    System.out.println("top");
                } else if ("bottom".equalsIgnoreCase(side)) {
                    System.out.println("bottom");
                }
            }
        };
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一二三应用开发平台应用开发示例(3)——生成库表及后端代码

生成库表 前端页面的配置&#xff0c;也就是视图功能&#xff0c;我们先放一放&#xff0c;来看看生成库表和后端代码。 关闭实体配置界面&#xff0c;回到实体列表&#xff0c;勾选“文件夹”实体&#xff0c;点击“生成库表”&#xff0c;并确定。 系统提示成功后&#xff…

【Linux应用】Linux系统的设备管理——Udev

1.udev概述 udev是 Linux2.6内核里的一个功能&#xff0c;它替代了原来的 devfs&#xff0c;成为当前 Linux 默认的设备管理工具&#xff0c;能够根据系统中的硬件设备的状态动态更新设备文件&#xff0c;包括设备文件的创建&#xff0c;删除等。 udev以守护进程的形式运行&am…

python基础 002 - 1 基础语法

1 标识符&#xff08;identifier&#xff09;&#xff0c;识别码&#xff0c;表明身份 身份证&#xff0c;ID 定义&#xff1a;在编程语言中标识符就是程序员自己规定的具有特定含义的词&#xff0c;比如类名称、属性名称、变量名等&#xff0c; 在Python 中&#xff0c;pyt…

教学资源共享平台的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;老师管理&#xff0c;用户管理&#xff0c;成绩管理&#xff0c;教学资源管理&#xff0c;作业管理 老师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用…

数组元素的内存地址计算【数据结构与算法C#版】

数组元素被存储在连续的内存空间中&#xff0c;这意味着计算数组元素的内存地址非常容易。给定数组内存地址&#xff08;首 元素内存地址&#xff09;和某个元素的索引&#xff0c;我们可以使用下方图 所示的公式计算得到该元素的内存地址&#xff0c;从而直接 访问该元素。 观…

python数据分析--- ch12-13 python参数估计与假设检验

python数据分析--- ch12-13 python参数估计与假设检验 1. Ch12--python 参数估计1.1 参数估计与置信区间的含义及函数版1.1.1 参数估计与置信区间的含义1.1.2 参数估计函数版1.1.3 参数估计函数版 1.2 Python单正态总体均值区间估计1.2.1 方差 σ 2 \sigma^2 σ2已知1.2.2 方差…

在 Blazor WebAssembly 中使用 EF Core 7 进行 CRUD 操作

如今&#xff0c;作为一名开发人员&#xff0c;如果我们想开发任何基于 Web 的应用程序&#xff0c;我们可以通过多种方式开发它们。现在&#xff0c;我们有几种选项来构建任何基于 Web 的应用程序&#xff0c;例如 MVC 框架、基于 API 的结构以及任何客户端框架&#xff0c;例…

HTML静态网页成品作业(HTML+CSS)——中华传统美德介绍网页(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;表格布局&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。…

sklearn 基础教程

scikit-learn&#xff08;简称sklearn&#xff09;是一个开源的机器学习库&#xff0c;它提供了简单和有效的数据分析和数据挖掘工具。sklearn是Python语言中最重要的机器学习库之一&#xff0c;广泛用于统计学习和数据分析。 以下是scikit-learn的基础教程&#xff0c;帮助您开…

Spring-kafka消费者消费的一些问题

前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目&#xff0c;如 Spring Cloud。通过与 Spring Boot 的自动配置结合&#xff0c;开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…

【面试干货】String、StringBuilder、StringBuffer 的区别

【面试干货】String、StringBuilder、StringBuffer 的区别 1、String2、StringBuffer3、StringBuilder4、性能对比5、使用建议 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;String、StringBuilder和StringBuffer是用…

云计算在保险行业的应用:太平财险团财险理赔新核心业务系统案例

随着科技的快速发展&#xff0c;云计算技术已经成为推动保险行业数字化转型的重要力量。云计算为保险公司提供了弹性、可扩展的计算资源&#xff0c;使其能够灵活应对业务高峰和低谷&#xff0c;提高业务运营效率和风控水平。太平财险与太平金科联合开发的“团财险理赔新核心业…

Synctv安装过程中遇到的docker镜像国内无法pull的问题

0x01 docker无法直接拉取对应镜像文件的问题 docker目前国内网络环境无法直接拉去小众而且稍微前沿的docker镜像产品&#xff0c;这对很多折腾玩家及其不友好&#xff0c;我首先想到了替换成国内的docker镜像站&#xff0c;但是对于SyncTV这个产品的docker镜像文件还是无法拉去…

志愿服务管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;广场论坛管理&#xff0c;志愿活动管理&#xff0c;活动报名管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;志愿活动&a…

python GUI开发: tkinter事件处理的几种方式详解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

代码随想录——分割回文串(Leetcode 131)

题目链接 回溯 class Solution {List<List<String>> res new ArrayList<List<String>>();List<String> list new ArrayList<String>();public List<List<String>> partition(String s) {backtracking(s, 0);return res;}p…

WebGL学习【焕新计划】

WebGL基础 在正式进入webgl之前&#xff0c;我想有必要简单了解一下渲染管线&#xff0c;毕竟它贯穿webgl学习的整个过程。 渲染管线流程图&#xff1a; webgl着色器简单语法&#xff1a; 在GLSL&#xff08;OpenGL Shading Language&#xff09;中&#xff0c;常见的变量类…

STM32程序启动过程

&#xff08;1&#xff09;首先对栈和堆的大小进行定义&#xff0c;并在代码区的起始处建立中断向量表&#xff0c;其第一个表项是栈顶地址&#xff08;32位&#xff09;&#xff0c;第二个表项是复位中断服务入口地址&#xff1b; &#xff08;2&#xff09;然后执行复位中断&…

HTML的常用标签

HTML&#xff08;补&#xff09; CSS选择器 元素选择器&#xff1a;指定一个标签给这个标签设置一个默认的样式。设置的样式对所有相同的标签都有用。 id选择器&#xff1a;我们可以给标签指定一个唯一的id&#xff0c;然后根据id可以在style标签中设置对应标签的样式元素。设…