javaFX基础知识

javaFX介绍

javafx是用于构建富互联网应用程序的java库。使用javaFX开发的应用程序可以在各种设备上运行,如台式计算机、手机、电脑、平板电脑等。
可以使用javaFX和基于JVM的技术,如java、groovy和jruby。

  • javaFX的特性
功能 说明
java语言编写 javaFX库都是java编写的,可以用于JVM执行的语言。
FXML 一个类似声明式标记语言HTML,唯一目的是定义用户界面
Scene Builder 可单独或集成到IDE中,用户可访问拖放设计界面,用于开发FXML
Swing互操作性 可以使用Swing Node类嵌入Swing内容,同样可食用FX功能更新Swing
内置UI控件 使用它可以开发一个全功能的应用程序
类似CSS的样式 提供类似样式CSS。
画布和打印API 提供了Canvas,即时模式演示的渲染API。
丰富的API集合 提供了一组丰富的API来开发GUI应用程序,2D和3D图形
集成图形库 为2D和3D图形提供类
图形管道 支持硬件加速图形管道(Prism)的图形,当与图形卡或GPU使用时,提供平滑的图形,如果系统不支持图形卡,则棱镜默认渲染栈
  • 程序界面的介绍


    image.png
public final class ButtonDemo extends Application {
    @Override
    public void start(Stage stage) {
        FlowPane main = new FlowPane();
       main.getChildren().add(new Button("Java Button"));
    ..
        StackPane pane = new StackPane();
        pane.getChildren().add(main);
        StackPane.setMargin(main, new Insets(100));
        pane.setStyle("-fx-background-color:WHITE");
        final Scene scene = new Scene(pane, 800, 200);
        scene.getStylesheets().add(ButtonDemo.class.getResource("/css/jfoenix-components.css").toExternalForm());
        stage.setTitle("JFX Button Demo");
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

布局

介绍SDK中容器相关类,我们称之为面板。我们可以为每个界面元素设置位置和大小进行手动布局。然而,更简单的使用布局面板。比如行(行)、列(Column)、堆栈(Stack)、瓷砖(Tile)等。当窗口变化时,布局面板根据元素属性重新设置位置和大小。

边框面板(BorderPane)

划分5个区域,每个区域的大小是没有限制,区域不设置内容不显示。多应用经典菜单布局
多输出空间默认分配中间区域,不足根据设置先后顺序覆盖。
例,

BorderPane border =new BorderPane();
HBox hbox=addHBox();
border.setTop(hbox);
border.setLeft(addVBox());
addStackPane(hbox);
border.setCenter(addGridPane());
border.setRight(addFlowpane());

水平盒子(HBox)

将多个节点排列在一行中提供一个简单的方法。
设置内边距(padding)属性可以用于管理节点到HBox边缘的距离。设置间距(spcing)管理元素之间的距离。设置style可改变背景颜色。

public HBox addHBox(){
HBox hbox=new HBox();
hbox.setPadding(new Insets(15,12,15,12));
hbox.setSpacing(10);
hbox.setStyle("-fx-background-color:#336699;");
Button buttonCurrent=new Button("Current");
buttonCurrent.setPrefSize(100,20);
hbox.getChildren().add(buttonCurrent);
return hbox;
}

垂直盒子(VBox)

和HBox和相似,节点排成一列。
设置外边距(Marrgin)属性可以为单个空间周围增加额外的空间。

public VBox addVBox(){
VBox vbox=new VBox();
 Hyperlink options[]=new Hyperlink[]{
new Hyperlink("sales"),
new Hyperlink("Marketing")
}
for(int i=0;i<2;i++){
VBox.setMargin(options[i],new Insets(0,0,0,8));
vbox.getChildren().add(options[i]);
}
return vbox;
}

堆栈面板(StackPane)

将所有节点放在一个堆栈中进行布局管理,后添加的覆盖之前的。
可以通过设置对齐属性(Alignment)来控制子节点在StackPane中的位置,会影响所有节点,设置外边距属性(Margin)可以控制在面板中单个子节点的位置。

public void addStackPane(Hbox hb){
StackPane stack=new StackPane();
Rectangle helpIcon=new Rectangle(30.0,25.0);
helpIcon.setFill(new LinearGradient(0,0,0,1,true,CycleMethod.NO_CYLE,
new Stop[]{
new Stop(0,Color.web("#4977A3")),
new Stop(0.5,Color.web("#B0C6DA")),
new Stop(1,Color.web("#D0E6FA")),}));
helpIcon.setStroke(Color.web("#D0E6FA"));
helpIcon.setArcHeight(3.5);
helpIcon.setArcWidth(3..5);
Text helpText=new Text("?");
stack.getChildren().addAll(helpIcon,helpText);
stack.setAlignment(Pos.CENTER_RIGHT);
StackPane.setMargin(helpText,new Insets(0,10,0,0));
hb.getChildren().add(stack);
HBox.setHgrow(stack,Priority.ALWAYS); //将HBox水平所有剩余空间都给stack
}

网格面板(GridPane)

可以创建基于行和列的网格放置节点。创建表单等其他基于行列组织的界面非常有用。
属性gridLinesVisible被用来显示网格线,调试时非常有用。设置间隙属性(Gap)用来管理行和列之间的距离。设置内边距属性(Padding)来管理节点元素与边缘之间的距离,设置垂直(Vertical)和水平(Horizontal)对齐属性(Alignment)能够控制单元格各空间的对齐方式。当窗口变化时,网格面板的节点会根据其自身的布局设置自动适应大小变化。

public GridPane addGridPane(){
GridPane grid =new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(0,10,0,10));

Text category=new Text("Sales:");
category.setFont(Font.font("Arial",FontWeight.BOLD,20));
grid.add(category,1,0);
...
ImageView imageChart =new ImageView(new Image(LayoutSample.class.getResourceAsStream("grid/1.png")));
grid.add(imageChart,1,2,2,1); //将饼图放在第三行,站第二和第三列
Text servicesPercent =new Text("Services\n20%");
GridPane.setValignment(servicePercent,Vpos.TOP);
grid.add(servicesPercent,3,2);
return grid;
}

流面板(Flowpane)

面板中包括的节点会连续的平铺防止,并且在边界处自动换行(列)。
设置间隙属性(Gap)用于管理行和列之间的距离,设置边距属性(Padding)用于管理节点元素边缘之间的距离。

public FlowPane addFlowPane(){
Flowpane flow = new FlowPane();
flow.setPadding(new Insets(5,0,5,0));
flow.setVgap(4);
flow.setHgap(4);
flow.setPrefWrapLength(170); // 预设FlowPane的宽度
flow.setStyle("-fx-background-color:DAE6F3;");

ImageView pages[] =new ImageView[8];
for(int i=0;i<8;i++){
pages[i]=new ImageView(new Image(LayoutSample.class.getResourceAsStream("graphics/chart_"+(i+1)+".png")));
flow.getChildren().add(pages[i]);
}
return flow;
}

瓷砖面板(TilePane)

和FlowPane很相似。将节点都放在一个网格中,其中网格大小一样的。
使用prefColumns 和prefRows属性可以设定TilePae的首选大小。设置间隙属性(Gap)用来管理行和列之间的间距。设置内边属性(padding)设置管理节点元素间的距离。

TilePane tile=new TilePane();
tile.setPadding(new Insets(5,0,5,0));
tile.setVgap(4);
tile.setHgap(4);
tile.setPrefColumns(2);
tile.setStyle("-fx-background-color:DAE6F3;");
ImageView pages[]=new ImageView[8];
for(int i=0;i<8;i++){
pages[i] =new ImageView(new Image(LayoutSample.class.getResourceAsStream("
grap/char_"+(i+1)+".png")));
tile.getChildren().add(pages[i]);
}

锚点面板(AnchorPane)

可以让节点锚定到面板的顶部、底部、左边、右边或者中间的位置。当窗体变化时,节点会保持与宝典之间的相对位置。一个节点可以锚定一个或多个位置,并个多个节点可以锚定同一个位置。

public AnchorPane addAnchorPane(GridPane grid){
AnchorPane anchorpane =new AnchorPane();
Button buttonSave =new Button("Save");
Button buttonCancel =new Button("Cancel");
HBox hb=new HBox();
hb.setPadding(new Insets(0,10,10,10));
hb.setSpacing(10);
hb.getChildren().add(grid,hb);
AnchorPane.setBottomAnchor(hb,8.0);
AnchorPane.setRightAnchor(hb,5.0);
AnchorPane.setTopAnchor(grid,10.0);
return anchorpane;
}

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 来源:ApacheCN Zetcode 翻译项目译者:飞龙协议:CC BY-NC-SA 4.0 贡献指南 本项目需...
    布客飞龙阅读 577评论 0 1
  • 原文地址:https://www.tutorialspoint.com/javafx/javafx_applica...
    Eirture阅读 7,595评论 0 16
  • java是面向过程的编程语言:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越...
    Java小辰阅读 3,044评论 0 17
  • 小城是一座千年的古城,巷子的来历有三百多年 现在的巷子是崭新崭新的红砖涂上了一层做旧的漆 只有短短的二、三十年。 ...
    金永辉煌阅读 1,767评论 12 27
  • 我最喜欢的一张照片是我自已的一张照片,那是我8周岁生日时,妈妈带我去拍的。当时去拍照的时候我是拒绝的,因为...
    棒棒糖_904b阅读 233评论 0 0