【Java】javafx界面布局

目录

一、面板类

(1)Pane面板

(2)HBox面板

(3)VBox面板

(4)BorderPane面板

(5)FlowPane面板

(6)GridPane面板

(7)StackPane面板

二、Color类和Font类

​三、Line类(直线)

四、Text类


一、面板类

(1)Pane面板
package com.javafx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class Panex extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Circle circle=new Circle(25, Color.LIGHTCORAL);
        circle.setCenterX(100);
        circle.setCenterY(50);
        Rectangle rectangle=new Rectangle(100,40,Color.LIGHTBLUE);
        rectangle.relocate(100,50);
        //旋转
        rectangle.setRotate(-33);
        Pane pane=new Pane(circle,rectangle);
       // pane.getChildren().addAll(circle, rectangle);
        Scene scene=new Scene(pane,300,200);
        primaryStage.setTitle("面板图形");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

(2)HBox面板

实现水平排列的控件框

package com.javafx;

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

public class HBox2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Button button1=new Button("确定");
        Button button2=new Button("取消");
        //设置按钮大小
        button1.setPrefSize(200,20);
        button2.setPrefSize(100,20);

        HBox hBox=new HBox(button1,button2);
        //水平框中内容与边界之间的距离(上、右、下、左)
        hBox.setPadding(new Insets(15,12,15,12));
        //水平框中控件之间的距离
        hBox.setSpacing(10);

        Scene scene=new Scene(hBox,300,50);
        primaryStage.setTitle("HBxo");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

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

(3)VBox面板

实现垂直排列的控件框

package com.javafx;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class VBox2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Button red=new Button("红色");
        Button green=new Button("绿色");
        Button blue=new Button("蓝色");
        Button yellow=new Button("黄色");
        blue.setPrefSize(100,20);

        VBox vBox=new VBox(red,green,blue,yellow);
        //设置控制框居中对齐
        vBox.setAlignment(Pos.CENTER);
        //垂直框之间的距离
        vBox.setSpacing(20);

        Scene scene=new Scene(vBox,300,200);
        primaryStage.setTitle("VBox");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

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

(4)BorderPane面板

边界面板,将面板分为中央(Center)、上(Top)、右(Right)、下(Bottom)、左(Left)五个区域,每个区域可以放置一个控件或其他面板

package com.javafx;

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

public class BorderPane2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane pane=new BorderPane();
        pane.setCenter(new Button("中央区域"));
        pane.setTop(new Button("上部工具条"));
        pane.setRight(new Button("右部"));
        pane.setBottom(new Button("下部状态栏"));
        pane.setLeft(new Button("左部菜单"));

        Scene scene=new Scene(pane,300,150);
        primaryStage.setScene(scene);
        primaryStage.setTitle("边界面板");
        primaryStage.show();
    }

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

(5)FlowPane面板

流式面板,可按行或列摆放,当这行或列不能容纳所有控件时,自动转换下一行或一列

package com.javafx;

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

public class FlowPane2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        //定义一个按钮数组
        Button[] buttons=new Button[8];
        FlowPane pane=new FlowPane();

        //排列方向先水平
        //pane.setOrientation(Orientation.HORIZONTAL);
        //排列方向先垂直
        pane.setOrientation(Orientation.VERTICAL);
        pane.setPadding(new Insets(15,10,15,10));
        pane.setVgap(9);
        pane.setHgap(9);
        for(int i=0;i<8;i++){
            buttons[i]=new Button("按钮"+(i+1));
            pane.getChildren().add(buttons[i]);
        }
        Scene scene=new Scene(pane,300,100);
        primaryStage.setScene(scene);
        primaryStage.setTitle("FlowPane面板");
        primaryStage.show();
    }

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

(6)GridPane面板

网格面板,可以灵活的创建包含行与列的网格

(将一种面板嵌套在另一种面板中)

package com.javafx;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class GridPane2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Label label1=new Label("用户名");
        Label label2=new Label("口令");
        //文本框
        TextField field1=new TextField();
        //密码框
        PasswordField field2=new PasswordField();
        Button ok=new Button("确定");
        Button cannel=new Button("取消");

        //创建水平控件框
        HBox hBox=new HBox(ok,cannel);
        //两个按钮之间的距离
        hBox.setSpacing(20);
        hBox.setPadding(new Insets(10,20,10,20));

        //根面板
        GridPane pane=new GridPane();
        pane.setHgap(10);
        pane.setVgap(10);
        pane.setPadding(new Insets(10,10,10,10));
        pane.add(label1,0,0);
        pane.add(label2,0,1);
        pane.add(field1,1,0);
        pane.add(field2,1,1);

        //columnlnder:单元格列的序号,rowlndex:单元格行的序号,colspan:控件跨越的列数,rowspan:控件跨越的行数
        pane.add(hBox,0,2,2,1);

        //显示网格线
        //pane.setGridLinesVisible(true);
        Scene scene=new Scene(pane,300,150);
        primaryStage.setScene(scene);
        primaryStage.setTitle("用户登录");
        primaryStage.show();


    }

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

(7)StackPane面板

栈面板布局,将所有节点放入一个栈中,每个节点添加到前一个节点上,常用于在图像或形状上添加文本

package com.javafx;


import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;



public class StackPane2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        StackPane pane=new StackPane();
        //创建一个矩形
        Rectangle rectangle=new Rectangle(80,100, Color.LIGHTBLUE);
        //矩形的边框为红色
        rectangle.setStroke(Color.RED);

        //创建一个椭圆对象
        Ellipse ellipse=new Ellipse(80,45,45,30);
        ellipse.setFill(Color.BLUE);
        ellipse.setStroke(Color.LIGHTGRAY);

        //创建一个文本对象
        Text text=new Text("3");
        text.setFont(Font.font(null,50));
        text.setFill(Color.WHITE);

        pane.getChildren().addAll(rectangle,ellipse,text);
        Scene scene=new Scene(pane,300,200);
        primaryStage.setScene(scene);
        primaryStage.setTitle("栈面板");
        primaryStage.show();

    }

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

二、Color类和Font类

字体粗细:

FontWeight.BOLD    //粗 
FontWeight.LIGHT   //细
FontWeight.NORMAL  //正常

字体形态:

FontPosture.ITALIC //斜体
FontPosture.REGULAR //正常
package com.javafx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;

public class FontDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        StackPane pane=new StackPane();
        Circle circle=new Circle();
        circle.setRadius(50);//半径
        circle.setStroke(Color.BLUE);//圆的边缘颜色
        circle.setFill(new Color(1.0,1.0,0.0,0.5));//圆的颜色(红、绿、蓝)及其透明度
        pane.getChildren().add(circle);

        //创建一个标签
        Label label=new Label("JavaFx");
        //设置字体样式、加粗、斜体、大小
        Font font=Font.font("Times New Roman", FontWeight.BOLD, FontPosture.ITALIC,20);
        label.setFont(font);
        label.setTextFill(Color.BLUE);
        pane.getChildren().add(label);

        Scene scene=new Scene(pane,240,120);
        primaryStage.setScene(scene);
        primaryStage.setTitle("颜色字体示例");
        primaryStage.show();

    }

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

三、Line类(直线)

还有Rectangle类、Circle类、Ellipse类(椭圆)、Arc类(弧)、Polygon类(多边形)等                     

fill属性:填充的颜色

stroke属性:笔画的颜色(边框)

strokeWidth属性:笔画的宽度

strokeLineCap属性:直线形状端点的风格

StrokeLineCap.BUTT(默认)

StrokeLineCap.ROUND(端点为圆)

StrokeLineCap.SQUARE(端点为方形)

package com.javafx;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.StrokeLineCap;
import javafx.stage.Stage;

public class LineDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        //添加在上面的控件需要绝对定位
        Group pane=new Group();

        //绿线
        Line greenLine=new Line(10,10,200,10);//设置线的坐标
        greenLine.setStroke(Color.GREEN);//设置线的颜色
        greenLine.setStrokeWidth(8);//设置宽度
        greenLine.setStrokeLineCap(StrokeLineCap.ROUND);//设置线的两端形状

        //设置虚线(为double类型,所以加d)
        greenLine.getStrokeDashArray().addAll(4d,20d);
        greenLine.setStrokeDashOffset(0);

        //红线
        Line redLine=new Line(10,40,200,40);
        redLine.setStroke(Color.RED);
        redLine.setStrokeWidth(10);
        redLine.setStrokeLineCap(StrokeLineCap.SQUARE);

        pane.getChildren().addAll(greenLine,redLine);

        //为场景的颜色
        Scene scene=new Scene(pane,300,150, Color.WHITE);

        primaryStage.setScene(scene);
        primaryStage.setTitle("绘制直线");
        primaryStage.show();

    }

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

四、Text类

添加三个文本TextFlow面板上

package com.javafx;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.stage.Stage;

public class Textch extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        Text text1=new Text("Hello");
        text1.setFill(Color.RED);
        text1.setFont(Font.font("Verdana",30));

        Text text2=new Text("Bold");
        text2.setFill(Color.LIGHTBLUE);
        text2.setFont(Font.font("Verdana", FontWeight.BOLD,30));

        Text text3=new Text("World");
        text3.setFill(Color.BLUE);
        text3.setFont(Font.font("verdana", FontPosture.ITALIC,30));
        text3.setRotate(90);   //旋转

        //创建TextFlow对象并添加3个文本对象
        TextFlow textFlow=new TextFlow();
        textFlow.setLayoutX(40);
        textFlow.setLayoutY(40);
        textFlow.getChildren().addAll(text1,text2,text3);

        Group group=new Group(textFlow);
        Scene scene=new Scene(group,330,120,Color.WHITE);
        primaryStage.setTitle("Hello world");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生命在于学习——Python人工智能原理(3.1)

三、深度学习 &#xff08;一&#xff09;深度学习的概念 1、深度学习的来源 深度学习的概念来源于人工神经网络&#xff0c;所以又称深度神经网络。 人工神经网络主要使用计算机的计算单元和存储单元模拟人类大脑神经系统中大量的神经细胞&#xff08;神经元&#xff09;通关…

【精读文献】J. Environ. Manage.|青藏高原生态恢复项目下植被覆盖动态及其对生态系统服务的约束效应

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 2.1 研究背景 2.2 研究现状 03 研究区域与数据集 3.1 研究区域 3.2 研究数据 04 研究方法 4.1 趋势分析 4.2 残差趋势分析 4.3 偏相关 4.4 生态系统服务评价 4.5 约束线的定义和提取 05 研究结果 5.1 植被…

重学java 55. 集合 Set接口

我救自己万万次&#xff0c;铮铮劲草&#xff0c;绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合&#xff0c;只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…

单元测试的心法分享

大家好&#xff0c;我是G探险者&#xff01; 今天我们简单聊聊单元测试的哪些事儿~ 两天时间我玩明白了单元测试的套路。 这里我分享一下思路。 在我眼里单元测试室什么&#xff1f; 请看这张草图&#xff1a; 单元测试主要关注单个代码单元&#xff08;通常是类或方法&am…

云原生架构案例分析_2.云原生技术助力某汽车公司数字化转型实践

名词解释&#xff1a; 互联网 在“互联网”模式下&#xff0c;我们仅仅把互联网看作是一种传播工具、传播手段、传播渠道和传播平台&#xff0c;对于互联网的应用大体上是在既有的运作逻辑的基础之上&#xff0c;把互联网作为延伸传媒影响力、价值和功能的一种延伸型工具&…

秒杀基本功能开发(不考虑高并发情况)

文章目录 1.显示秒杀状态1.controller修改GoodsController.java的toDetail方法&#xff0c;响应秒杀状态和秒杀剩余时间 2.前端1.goodsDetail.html 图片下面添加一行秒杀开始时间2.goodsDetail.html 添加计时器js代码 3.测试1.秒杀进行中2.修改db的秒杀开始时间为明天3.出现秒杀…

msvcr120.dll是干嘛的?出现找不到msvcr120.dll丢失怎样解决

msvcr120.dll是Microsoft Visual C 2012 Redistributable的核心文件&#xff0c;它是Microsoft Corporation开发的C/C运行时库文件之一。这个文件通常与应用程序一起安装&#xff0c;为应用程序提供许多基本的运行时功能&#xff0c;包括内存管理、异常处理、输入/输出操作等。…

Jenkins、GitLab部署项目

1、安装JDK 1.1、下载openJdk11 yum -y install fontconfig java-11-openjdk1.2、查看安装的版本号 java -version1.3、配置环境变量 vim /etc/profile在最底部添加即可 export JAVA_HOME/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64 export PATH$JAVA_HOME/…

SpringBoot注解--10--@Bean,对象注入的三种方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Bean一、如何使用方法注解注意Bean 的命名规则&#xff0c;当没有设置 name 属性时&#xff0c;那么 bean 默认的名称就是方法名&#xff0c;当设置了 name 属性之后…

【OJ】C++ | 二叉树进阶 · 合集(2)

摘要&#xff1a;根据二叉树创建字符串、二叉树的最近公共祖先、二叉树的层序遍历 前言&#xff1a;承接上文&#xff0c;本文继续提供二叉树进阶有关题目的解法。如有错误&#xff0c;烦请指正。 目录 1. 根据二叉树创建字符串 题解及代码 2. 二叉树的最近公共祖先 题解及…

PHAR反序列化

PHAR PHAR&#xff08;PHP Archive&#xff09;文件是一种归档文件格式&#xff0c;phar文件本质上是一种压缩文件&#xff0c;会以序列化的形式存储用户自定义的meta-data。当受影响的文件操作函数调用phar文件时&#xff0c;会自动反序列化meta-data内的内容,这里就是我们反序…

2024年06月编程语言流行度排名

点击查看最新编程语言流行度排名&#xff08;每月更新&#xff09; 2024年06月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多&#xff0c;大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

JAVA和爬虫,那个值得学习

如果你是初学者&#xff0c;建议先从基础的编程语言学起&#xff0c;比如Java&#xff0c;它能为你打下坚实的编程基础&#xff0c;并且在未来转学其他语言或技术时更加容易。随着编程基础的建立&#xff0c;你可以根据自己的兴趣或职业规划&#xff0c;学习爬虫技术作为补充技…

使用python下载股票数据至sqlite数据库

代码下载地址&#xff1a; https://download.csdn.net/download/weixin_44600457/89389489

961题库 北航计算机 计算机网络 附答案 选择题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 OSI 参考模型的第 5 层( 自下而上 ) 完成的主要功能是 A. 差错控制 B. 路由选择 C. 会话管理 D. 数据表示转换 100BaseT 快速以太网使用的导向传输介质是 A. 双绞线 B. …

德人合科技——@天锐绿盾 | -文档透明加密系统

天锐绿盾文档透明加密系统是一种先进的数据安全解决方案&#xff0c;旨在保护企业和组织的敏感信息&#xff0c;防止未经授权的访问和泄漏。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是该系统的一些关键特点和功…

FJSP:常春藤算法(Ivy algorithm,LVYA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP&#xff1a;常春藤算法&#xff08;Ivy algorithm&#xff0c;LVYA&#xff09;求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP&#xff1a;常春藤算法&#xff08;Ivy algorithm&#xff0c;…

随后记: uniapp uview u-dropdown 下拉菜单固定高度滑动不生效

使用u-dropdown 下拉组件 按照uview官网讲解使用 配置根本不生效 scroll-y"true" style"height: 200rpx;" 但是在下拉的时候&#xff0c;不能上下滑动 &#xff0c;原因是自带的遮罩层挡住了 解决办法&#xff1a;在下拉菜单打开和关闭的时候&#xff0c…

英语四级翻译练习笔记②——大学英语四级考试2023年12月真题(第二套)

目录 引言&#xff08;必看&#xff09; 四级翻译评分标准分析及真题解析 四级翻译评分标准 四级翻译真题 学生作答 错误标注 标准满分答案 提高翻译水平的建议 引言&#xff08;必看&#xff09; 这是一篇英语四级翻译的练习的专栏&#xff0c;如果相信我的话就将这…

树莓派5烧系统和ssh远程实现

1、硬件说明 树莓派5 64G micro SD卡读卡器 2、烧录系统过程记录 之前写过一篇pi4B烧录Ubuntu22.04的博客&#xff0c;这篇就简单记录备份下 2.1 去ubuntu官网在树莓派上安装Ubuntu | Ubuntu下载Ubuntu 桌面 24.04 LTS 我之前已经下好了就有个(1) 2.2 用读卡器把SD卡插到…