首页 > 其他分享 >如何给布局或者控件添加边框

如何给布局或者控件添加边框

时间:2023-05-24 10:57:05浏览次数:38  
标签:控件 javafx 边框 添加 import new BorderStroke Border

如何给布局或者控件添加边框

我在学习和开发 JavaFX 程序时,对 Pane 会有一些疑问,比如:

  • 它们的大小是怎样的?
  • 它们的大小和父节点或者窗口的关系是怎样的?

相同的问题在控件上也存在,比如一个 Label 到底占据了多大的空间(因为默认 Label 没有边框展示)?

我想,如果可以给布局或者控件添加上边框,可以更加清晰直观的看到答案。

Pane 和 Control 都有一个 setBorder 的方法用于设置边框。

我的测试方法如下:

private static void setDebugBorderForPane(Pane pane)
{
    BorderStroke borderStroke = new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, null, null);
    Border border = new Border(borderStroke);
    pane.setBorder(border);
}

private static void setDebugBorderForControl(Control control)
{
    BorderStroke borderStroke = new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID, null, null);
    Border border = new Border(borderStroke);
    control.setBorder(border);
}

这两个方法分别为布局和控件设置测试边框,为布局设置的是红色实线边框,而为控件设置的是蓝色实线边框。

BorderStroke 构造函数的第三个参数是设置边角的样式,第四个参数是设置边框的宽度,用不上的话传 null 就可以了。

经过测试,我发现,当我把 VBox 作为根布局传递给 Scene 时,VBox的大小刚好填满了整个窗口,而且会随着窗口的大小变化而变化,随时保持填充的状态。

如下:

image

代码示例

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class SetBorderExample extends Application
{
    private static void setDebugBorderForPane(Pane pane)
    {
        BorderStroke borderStroke = new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, null, null);
        Border border = new Border(borderStroke);
        pane.setBorder(border);
    }

    private static void setDebugBorderForControl(Control control)
    {
        BorderStroke borderStroke = new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID, null, null);
        Border border = new Border(borderStroke);
        control.setBorder(border);
    }

    private Pane buildLayout()
    {
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10)); // 设置控件距离布局上下左右边的距离至少为10像素
        setDebugBorderForPane(vBox);

        Label label = new Label("Hello Border");
        setDebugBorderForControl(label);
        vBox.getChildren().add(label);

        return vBox;
    }

    @Override
    public void start(Stage window) throws Exception
    {
        Scene scene = new Scene(this.buildLayout(), 400, 300);
        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

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

总结

为布局或者控件设置边框的方法是:

  1. 定义一个 BorderStroke ,用于设置边框的样式
  2. 定义一个 Border 对象,用 BorderStroke 初始化
  3. 调用 setBorder 方法,将 Border 对象传入,从而设置边框

标签:控件,javafx,边框,添加,import,new,BorderStroke,Border
From: https://www.cnblogs.com/javafx-howto/p/17427363.html

相关文章

  • python+playwright 学习-62 日历控件操作
    前言遇到输入框是弹出日历控件,选一个日期的这种场景,可以直接在输入框输入内容。如果输入框是readonly的时候,可以用js改变输入框的属性日历控件如果输入框是日历控件先看能不能直接输入一个日期,如果能直接输入的情况,就不用点开了代码示例#上海悠悠wx:283340479#blog:ht......
  • centos 6上 yum检查epel源是否添加成功报错 Cannot retrieve metalink for repository
    在我们使用yum安装时,经常发现没有第三方源,此时需要安装epel(ExtraPackagesforEnterpriseLinux,企业版Linux的额外软件包)Epel是什么?它是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和ScientificLinux这样的衍生版本......
  • 界面控件DevExtreme使用指南 - 如何自定义上下文菜单和工具栏
    DevExtreme FileManager(文件管理器)小部件现在支持自定义内置的工具栏和上下文菜单,用户可以使用标准和定义的命令项填充项目集合,并配置设置来更改其外观和操作。DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQu......
  • uniapp 数组添加不重复元素
    if(this.checkTimes.includes(_item.time)){this.checkTimes=this.checkTimes.filter((item)=>{returnitem!=_item.time;});}else{this.ch......
  • 3d打印机添加AI炒面检测服务 klipper+fluidd ubuntu本地部署TheSpaghttiDetective Ser
    炒面检测(TheSpaghettiDetective)介绍:炒面检测服务可以借助打印机的摄像头,检测打印是否炒面(打印失败)并作出提醒或停止打印的一种服务,该服务由服务器和客户端组成客户端支持两种: ocoprint或klipper服务器也有两种:ocobi官方提供的有限免费服务......
  • 控件包含代码块(即 <% ... %>),因此无法修改控件集合(用户自定义控件中)
    https://www.cnblogs.com/zlfucku/archive/2011/09/05/2167943.html原因:就是runat中不能有<%%>这样的东西,不然就会报这个错误解决办法: 这两行拖到body里就好了,不要放在有headrunat=server的代码块内,不然就报这个错。......
  • 盘点界面控件DevExpress WinForms的几大应用程序主题
    DevExpressWinForm控件包含了50+个自定义皮肤,其中涵盖了MicrosoftOffice和Windows11启发式的应用程序主题。PS:DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Of......
  • 为什么不能向下兼容呢?这是因为不同版本的 Refs 文件系统之间可能存在较大的差异,如接口
    Refs文件系统是在WindowsServer2012R2引入的,目前主要用于Windows服务器操作系统中。截至目前为止,Windows服务器操作系统中已经支持了三个版本的Refs文件系统:RefsV1:WindowsServer2012R2中引入的第一代Refs版本,该版本引入了Refs文件系统,并支持自动修复、数据......
  • delphi TcxGridPopupMenu控件学习笔记
    TcxGridPopupMenu控件用来给cxgrid设置右键菜单的.它长这样属性面板长这样: 默认的系统菜单长这样: 这菜单上面有好几个选项我不想要,怎么办?隐藏它呗!private{Privatedeclarations}procedureStdHeaderMenuPopup(Sender:TObject);//-----------------......
  • Qt 的Cmake方式如何创建资源文件和添加类
    CLion(误,QTCreator)添加资源文件时选择Qt然后选择QtResourceFile单击choose,然后给你的资源文件输入一个名字比如res单击下一步,然后完成,保存这时候工程和上面添加类是一样的,看不到添加的资源文件,还是要手动到CMakeList.txt文件在里面手动输入res.qrc然后单击X关掉CMakeList......