JavaFX:控件边框设置

news2024/11/18 14:40:01

JavaFX中控件的边框也可以进行设置。主要有两种方式,一种是Java方式,一种是CSS方式。

JavaFX中控件继承自Region类。setBorder方法用来设置边框属性。

// The border of the Region, which is made up of zero or more BorderStrokes, and zero
// or more BorderImages. It is possible for a Border to be empty, where it has neither
// strokes nor images, and is semantically equivalent to null.
public final void setBorder(Border value)

边框类Border是一个不可变的对象,它封装了渲染区域边框所需的全部数据集。由于该类是不可变的,因此可以在多个不同的 "区域 "中自由重复使用相同的边框。

class Border {

    // 四个构造函数。
    public Border(List<BorderStroke> strokes, List<BorderImage> images);

    public Border(BorderStroke[] strokes, BorderImage[] images);

    public Border(BorderStroke... strokes);
  
    public Border(BorderImage... images);
}

每个边框类Border都由笔画BorderStoke和/或图像组成。两个列表都不会为空,但其中一个或两个都可能为空。在渲染时,如果没有指定图像或没有图像加载成功,那么所有笔画都将按顺序渲染。如果指定了任何图像且加载成功,则不会绘制任何笔画,但这些笔画仍会对边框的内侧和外侧产生影响。

class BorderStroke {
    public BorderStroke(Paint stroke,
                        BorderStrokeStyle style,
                        CornerRadii radii,
                        BorderWidths widths);

    public BorderStroke(Paint stroke,
                        BorderStrokeStyle style,
                        CornerRadii radii,
                        BorderWidths widths,
                        Insets insets);

    public BorderStroke(Paint topStroke,
                        Paint rightStroke,
                        Paint bottomStroke,
                        Paint leftStroke,
                        BorderStrokeStyle topStyle,
                        BorderStrokeStyle rightStyle,
                        BorderStrokeStyle bottomStyle,
                        BorderStrokeStyle leftStyle,
                        CornerRadii radii,
                        BorderWidths widths,
                        Insets insets);
}

    topStroke - The fill to use on the top. If null, defaults to Color.BLACK.
    rightStroke - The fill to use on the right. If null, defaults to the same value as topStroke.
    bottomStroke - The fill to use on the bottom. If null, defaults to the same value as topStroke.
    leftStroke - The fill to use on the left. If null, defaults to the same value as rightStroke.
    topStyle - The style to use on the top. If null, defaults to BorderStrokeStyle.NONE.
    rightStyle - The style to use on the right. If null, defaults to the same value as topStyle.
    bottomStyle - The style to use on the bottom. If null, defaults to the same value as topStyle.
    leftStyle - The style to use on the left. If null, defaults to the same value as rightStyle.
    radii - The radii. If null, defaults to square corners by using CornerRadii.EMPTY.
    widths - The thickness of each side. If null, defaults to DEFAULT_WIDTHS.
    insets - The insets indicating where to draw the border relative to the region edges. If null, defaults to Insets.EMPTY.

定义边框的描边类BorderStroke,用于为区域设计样式。描边是一种基于矢量的渲染,用于勾勒边框区域的轮廓。它可以从 Region 的边缘嵌入(或外移),在计算 Region 的嵌入(用于定义内容区域)时,会考虑到描边的值。在使用任何边框图像时,都不会使用描边视觉效果。

BorderStrokeStyle:定义 BorderStroke 一侧使用的描边样式。有几种预定义的样式,不过这些预定义样式的属性可能与最终绘制它们时使用的设置不一致。您也可以创建一个新的 BorderStrokeStyle,然后手动定义每个描边设置,这与任何形状类似。注:BorderStrokeStyle.NONE是默认值,设置边框不显示。

具体示例:

package javafx8.ch10;

import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Paint;
import javafx.stage.Screen;
import javafx.stage.Stage;

/**
 * @copyright 2003-2023
 * @package   javafx8.ch10
 * @file      BorderTest.java
 * @date      2023-10-16 15:47
 * @author    qiao wei
 * @version   1.0
 * @brief     测试控件边框设置。
 * @history
 */
public class BorderTest extends Application {
    
    public BorderTest() {}

    @Override
    public void start(Stage primaryStage) throws Exception {
        start02(primaryStage).show();
    }

    public static void main(String[] args) {
        Application.launch(BorderTest.class, args);
    }
    
    /**
     * @class   BorderTest
     * @date    2023-10-16 16:13
     * @author  qiao wei
     * @version 1.0
     * @brief   创建Stage。边框设置不做任何设置。
     * @param   primaryStage 主窗体。
     * @return  修改后的主窗体primaryStage。
     * @throws
     */
    private Stage start01(Stage primaryStage) {
        Pane pane = new Pane();
        
        // 设置pane尺寸。
        Rectangle2D screenRectangle = Screen.getPrimary().getBounds();
        double screenWidth = screenRectangle.getWidth();
        double screenHeight = screenRectangle.getHeight();        
        pane.setPrefSize(screenWidth / 3, screenHeight / 3);
        
        primaryStage.setScene(new Scene(pane));
        primaryStage.setTitle("添加Pane,对边框不做任何设置");
        
        return primaryStage;
    }
    
    /**
     * @class   BorderTest
     * @date    2023-10-16 17:37
     * @author  qiao wei
     * @version 1.0
     * @brief   
     * @param   
     * @return  
     * @throws
     */
    private Stage start02(Stage primaryStage) {
        Pane pane = new Pane();

        // 设置pane尺寸。
        Rectangle2D screenRectangle = Screen.getPrimary().getBounds();
        double screenWidth = screenRectangle.getWidth();
        double screenHeight = screenRectangle.getHeight();
        pane.setPrefSize(screenWidth / 3, screenHeight / 3);
        
        // 设置边框画笔。BorderStrokeStyle字段设置绘制边框,NONE不显示边框,DASHED、DOTTED、SOLD是预定义的边框。
        BorderStroke borderStroke = new BorderStroke(
            Paint.valueOf("#00FF00"),
            BorderStrokeStyle.DOTTED,
            new CornerRadii(30),
            new BorderWidths(20)
        );        
        pane.setBorder(new Border(borderStroke));

        primaryStage.setScene(new Scene(pane));
        primaryStage.setTitle("添加Pane,设置BorderStroke");

        return primaryStage;
    }
}

start01方法结果:

start02方法结果:

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

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

相关文章

Python制作PDF转Word工具(Tkinter+pdf2docx)

一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错&#xff0c;安装完成引入from pdf2docx import Converter运行也可能报错&#xff0c;可以根据报错提示看缺少那些库&#xff0c;先卸载pip uninstall xxx,使用pip install python-docx -i htt…

[架构之路-238]:目标系统 - 纵向分层 - 网络通信 - 网络规划与设计框架

目录 一、需求分析 二、网络规划与设计 三、逻辑网络设计 四、物理设计 五、分层网络设计 5.1 接入层交换机 5.2 汇聚层交换机 5.3 核心层交换机 六、网络存储技术 七、IPV6 八、综合布线系统 九、物联网 十、云计算 十一、云存储 一、需求分析 二、网络规划与设…

Hadoop3教程(十五):MapReduce中的Combiner

文章目录 &#xff08;103&#xff09;Combiner概述什么是CombinerCombiner有什么用处Combiner有什么特点如何自定义Combiner &#xff08;104&#xff09;Combiner合并案例实操如何从日志里查看Combiner如果不存在Reduce阶段&#xff0c;会发生什么自定义Combiner的两种方式 参…

error=‘Cannot allocate memory‘ (errno=12)

Bug信息 OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000080000000, 716177408, 0) failed; error=Cannot allocate memory (errno=12)Bug本质原因 服务器内存不足,Java程序无法启动 查看服务器剩余内存 free -h常用的解决思路 减小服务中对JVM的…

基于vue实现滑块动画效果

主要实现&#xff1a;通过鼠标移移动、触摸元素、鼠标释放、离开元素事件来进行触发 创建了一个滑动盒子&#xff0c;其中包含一个滑块图片。通过鼠标按下或触摸开始事件&#xff0c;开始跟踪滑块的位置和鼠标/触摸位置之间的偏移量。然后&#xff0c;通过计算偏移量和起始时的…

2023年10月工作经验及问题整理总结

目录 1.window自带的base64加密解密 2.ElementUI修改鼠标移动到表格的背景色 3.vscode保存时几万个eslint错误 4.Git 拉取Gitee仓库报错&#xff1a;“fatal: unable to access ": Failed to connect to 127.0.0.1 port 1080: Connection r... 4.1本地查看Git是否使用…

Python爬虫-雪球网

前言 本文是该专栏的第8篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly94dWVxaXUuY29tLw== 需求:根据目标搜索词,获取搜索结果数据 废话不多说,跟着笔者直接往下看详细内容。(附带完整代码) 正文 1. 请求方式和参数分析 使用浏览器打开链接之后,…

【深度学习实验】循环神经网络(四):基于 LSTM 的语言模型训练

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. RNN与梯度裁剪 2. LSTM模型 3. 训练函数 a. train_epoch b. train 4. 文本预测 5. GPU判断函数 6. 训练与测试 7. 代码整合 经验是智慧之父&#xff0c;记忆…

详解 ElasticSearch 集群搭建

&#x1f339; 以上分享 ElasticSearch 安装部署&#xff0c;如有问题请指教写。&#x1f339;&#x1f339; 如你对技术也感兴趣&#xff0c;欢迎交流。&#x1f339;&#x1f339;&#x1f339; 如有需要&#xff0c;请&#x1f44d;点赞&#x1f496;收藏&#x1f431;‍&a…

【微信小程序】6天精准入门(第2天:小程序的视图层、逻辑层、事件系统及页面生命周期)

一、视图层 View 1、什么是视图层 框架的视图层由 WXML 与 WXSS 编写&#xff0c;由组件来进行展示。将逻辑层的数据反映成视图&#xff0c;同时将视图层的事件发送给逻辑层。WXML(WeiXin Markup language) 用于描述页面的结构。WXS(WeiXin Script) 是小程序的一套脚本语言&am…

【每日一题】倍数求和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;一次遍历 其他语言cpython3 写在最后 Tag 【一次遍历】【数组】【2023-10-17】 题目来源 2652. 倍数求和 题目解读 找出 [1. n] 范围内可以被 3、5、7 整除的所有整数之和。 解题思路 方法一&#xff1a;一次遍历 …

字符串排序程序

字符串排序程序&#xff0c;对一个字符串中的数值进行从小到大的排序 例如排序前给定的字符串为" 20 78 9 -7 88 36 29" 排序后&#xff1a; -7 9 20 29 36 78 88 要求使用包装类对数值类型的字符串转换成整型进行排序。 public class StringSort {public static vo…

【MySQL】MySQL的安装

MySQL安装路径&#xff1a;MySQL 安装MySQL 1、都是选择红框 2、选择社区版 3、 4、 5、确保安装路径中没有中文字符&#xff0c;否则可能会出现问题 &#xff1b; 以上操作之后就会生成这个&#xff0c;再双击它&#xff1b; 6、点击next&#xff0c;也许每个人进入的界面不…

ICMP协议(二)

一 ping工作原理 ① 为什么ping不通 "ping不通分为两类" 1) 请求没有到目标服务器2) 请求到了目标服务器,但是没有回包 "常见原因" 1、对方关机/ip不存在备注&#xff1a; ping同网段不存在的ip地址2、网段不同,通过路由也无法找到3、防火墙 [安全组…

Springboot结合Mockito写单元测试实践和原理

文章目录 前言一、使用最佳实践使用场景SpyBean失效场景解决Mock失效的问题避免FactoryBean的实现方式使用MockBean&#xff0c;但是要指定name 个人推荐 二、原理1. MockBean2.SpyBean方法调用 总结 前言 相信看我博客的都是javaer&#xff0c;工作中一般都是使用Springboot框…

分类算法-逻辑回归与二分类

1、逻辑回归的应用场景 广告点击率是否为垃圾邮件是否患病金融诈骗虚假账号 看到上面的例子&#xff0c;我们可以发现其中的特点&#xff0c;那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。 2、 逻辑回归的原理 2.1 输入 逻辑回归的输入就是一个线性…

Flutter 知识集锦 | 监听与通知 ChangeNotifier

theme: cyanosis 1. 数据的提供者与消费者 今天想要和大家好好聊聊 ChangeNotifier 这个东西&#xff0c;从名字上来看它由 change(改变) 和 Notifier(通知器) 构成。打个比方&#xff1a; 有三个铁粉跟我说: "你发新文章的时候跟我说一声"。 之后我发布文章后&…

基于nodejs+vue网课学习平台

各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改&#xff0c;以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…

怎么把flac音频变为mp3?

怎么把flac音频变为mp3&#xff1f;FLAC音频格式在许多平台和应用程序中都得到支持和应用。FLAC音频格式被广泛支持和应用。许多平台、设备和应用程序都支持FLAC格式&#xff0c;如Windows、macOS和Linux操作系统、各种音乐播放器软件、智能手机和平板电脑、在线音乐平台和流媒…

Kaggle - LLM Science Exam(三):Wikipedia RAG

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、 [EDA, Data gathering] LLM-SE ~ Wiki STEM | 1k DS2.1 Data overview2.2 Data gathering 三、如何高效收集数据3.1 概述3.2 与训练数据关联的维基百科类别…