在java fx中网格布局,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使用时,提供平滑的图形,如果系统不支持图形卡,则棱镜默认渲染栈

程序界面的介绍

172d3018bfc9

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;

}

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值