JAVAFX
FlowPane布局
Flowpane是一个容器。它在一行上排列连续的子组件,并且如果当前行填充满了以后,则自动将子组件向下推到一行
public class FlowPanedemo extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("FlowPanedemo");
FlowPane flowPane = new FlowPane();
//设置控件的垂直水平间距
flowPane.setHgap(10);
flowPane.setVgap(10);
Button button1 = new Button("button1");
Button button2 = new Button("button2");
button2.setPrefSize(100,100);
Text text = new Text();
text.setText("hello world");
text.setFill(Color.RED);
//复选框
CheckBox checkBox = new CheckBox();
checkBox.setText("123");
RadioButton radioButton = new RadioButton();
radioButton.setText("radiobuttion");
TextField textField = new TextField();
textField.setText("111");
flowPane.getChildren().addAll(button1,button2,text,checkBox,radioButton,textField);
Scene scene = new Scene(flowPane,500,300);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
HBox水平布局
边框样式:
1. border-style边框样式(hidden隐藏、none无边框、dotted电线、dashed虚线、soild实线、double两个边框、groove3D沟槽边框、ridge3D脊边框、inset3D嵌入边框、outset3D突出边框)
缩写:
①border-style: 上 右 下 左;
②border-style: 上 左右 下;
③border-style: 上下 左右;
④border-style: 上下左右;
border-width边框宽度(5px、medium):可以单独设置一边的宽度。
border-top-width上边框、border-bottom-width下边框、border-right-width有边框、border-left-width左边框。
border-color边框颜色: 可以单独设置一边的颜色。
border-top-color、border-bottom-color、border-right-color、border-left-color
缩写:
①border: 5px solid red;
②border-top:5px solid red ;
③border-bottom:5px solid red ;
④border-right:5px solid red ;
⑤border-left:5px solid red ;
轮廓
轮廓样式:轮廓是在边框外面的一层,其用法同边框。
outline-style
outline-color
outline-width
缩写:outline:green dotted thick ;
边距
边距:(百分数、em、px)
margin-top
margin-bottom
margin-right
margin-left
缩写:margin: 上 右 下 左;
填充
填充:(百分数、em、px)
padding-top
padding-bottom
padding-left
padding-right
缩写:padding: 上 右 下 左;
尺寸
尺寸:(百分数、em、px)
包括height、width
height、max-height、min-height
width、max-width、min-width
//设置控件间的间距
hbox.setSpacing(10);
//设置内边距
Hbox.setPadding(new Insets(10));
//设置某个组件的边距
Hbos.setMargin(b1,new Insets(10))
//设置水平居中方式
Hbox.setAlignment(Pos.CENTER);
案例
public class HBoxDemo extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("HBoxDemo");
Group group = new Group();
//创建水平布局
HBox hbox = new HBox();
//配置背后颜色
hbox.setStyle("-fx-background-color: #336699;");
hbox.setMinWidth(300);
hbox.setMinHeight(50);
group.getChildren().add(hbox);
//设置控件间的间距
hbox.setSpacing(10);
Button button = new Button();
button.setText("确定");
Text text = new Text();
text.setText("hello");
text.setFont(Font.font("宋体",30));
//Insets:设置偏移量 上右下左
hbox.setMargin(button,new Insets(10,0,0,0));
hbox.setMargin(text,new Insets(10,0,0,0));
hbox.getChildren().addAll(button,text);
Scene scene = new Scene(group,500,400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
VBox垂直布局
Rectangle矩形、Label标签、TextArea文本域(输入框)、Alignment对齐
public void start(Stage stage) throws Exception {
stage.setTitle("VBoxdemo");
Group group = new Group();
TextArea mytestArea =new TextArea();
HBox hbox = new HBox(50);
hbox.setMinWidth(600);
hbox.setMinHeight(100);
hbox.setStyle("-fx-background-color: #336699;");
VBox vbox = new VBox(50);
vbox.setMinWidth(100);
vbox.setMinHeight(400);
vbox.setStyle("-fx-background-color: #330000;");
Rectangle r1 = new Rectangle(200,200);
r1.setY(300);
r1.setX(300);
Label lbl =new Label("VBox");
group.getChildren().addAll(hbox,vbox,r1);
Scene scene =new Scene(group,600,500, Color.rgb(0,0,0,0));
stage.setScene(scene);
stage.show();
}
public void start(Stage primaryStage) {
TextArea myTextArea = new TextArea();
VBox vbox = new VBox();
vbox.getChildren().add(myTextArea);
//设置以后跟随外边框增长
VBox.setVgrow(myTextArea, Priority.ALWAYS);
Scene scene = new Scene(hbox, 320, 112, Color.rgb(0, 0, 0, 0));
primaryStage.setScene(scene);
primaryStage.show();
}
Bordderpane边框窗格
JavaFX BorderPane布局、HyperLink超级链接、Hyper超级、Insets插入、
BorderPane布局顶部,底部,左,右或中心区域中的子节点。每个区域只能有一个节点。BorderPane的顶部和底部区域允许可调整大小的节点占用所有可用宽度。 左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。默认情况下,所有边界区域尊重子节点的首选宽度和高度。放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:
顶部: Pos.TOP_LEFT
底部: Pos.BOTTOM_LEFT
左侧: Pos.TOP_LEFT
右侧: Pos.TOP_RIGHT
中心: Pos.CENTER
案例:
public void start(Stage stage) throws Exception {
stage.setTitle("borderpane测试");
Image image = new Image(new FileInputStream("F:\\IDEADemo\\hello\\Snipaste_2022-10-12_20-03-32.jpg"));
BorderPane borderPane = new BorderPane();
borderPane.setStyle("-fx-background-color: #330000;");
HBox top = new HBox();
top.setMinWidth(30);
top.setMinHeight(30);
Text text = new Text("Welcome");
text.setFont(Font.font("宋体", FontWeight.BOLD,30));
top.setStyle("-fx-background-color: #336699;");
//设置top居中
top.setAlignment(Pos.CENTER);
top.getChildren().addAll(text);
VBox letf = new VBox();
letf.setMinWidth(50);
letf.setStyle("-fx-background-color: #226699;");
Button b1 =new Button("改色");
Button b2 = new Button("改色");
Button b3 = new Button("改色");
Button b4 = new Button("改色");
letf.getChildren().addAll(b1,b2,b3,b4);
VBox right = new VBox();
Button r1 =new Button("11");
Button r2 = new Button("22");
Button r3 = new Button("33");
Button r4 = new Button("44");
right.setStyle("-fx-background-color: #111199;");
right.setMinWidth(50);
right.getChildren().addAll(r1,r2,r3,r4);
HBox Bottom= new HBox();
Hyperlink hl = new Hyperlink("www.baidu.com");
Bottom.setMinHeight(30);
Bottom.setStyle("-fx-background-color: #113339;");
Button close = new Button("关闭系统");
close.setOnAction((e)->{
Platform.exit();
});
Bottom.getChildren().addAll(close,hl);
Bottom.setAlignment(Pos.CENTER);
GridPane Center = new GridPane();
Center.setMinWidth(350);
borderPane.setTop(top);
borderPane.setLeft(letf);
// borderPane.setRight(right);
borderPane.setBottom(Bottom);
borderPane.setCenter(Center);
b1.setOnAction((e)->{
Center.setStyle("-fx-background-color: #113339;");
});
b2.setOnAction((e)->{
Center.setStyle("-fx-background-color: #222239;");
});
b3.setOnAction((e)->{
Center.setStyle("-fx-background-color: #333339;");
});
b4.setOnAction((e)->{
Center.setStyle("-fx-background-color: #444439;");
});
//获取鼠标移动坐标
Center.addEventFilter(MouseEvent.MOUSE_MOVED, e->{
String xy="鼠标坐标为:"+e.getX()+","+e.getY();
text.setText(xy);
text.setLayoutX(e.getX()+70);
text.setLayoutY(e.getY()+70);
});
Scene scene =new Scene(borderPane,400,300);
stage.getIcons().add(image);
stage.setScene(scene);
stage.show();
}
GirdPane布局
Gird网格、pane窗格、Lines线、Visible可见的、ColumnConstraints列约束、priority优先事项、always总是、column列、
网格布局
GridPane通常用于布局:表单布局
GridPane可以在行,列或单元格级别指定约束。
例如,我们可以设置包含输入文本字段的第二列,以在窗口调整大小时调整大小。
使用Java FX创建表格的时候,这个布局非常方便。
包javafx.scene.layout名为GridPane这个类提供了 11 个属性,它们是 -
- alignment- 此属性可以设置位置,使用方式setAlignment()方法设置此属性的值。
放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:
-
-
- 顶部: Pos.TOP_LEFT
- 底部: Pos.BOTTOM_LEFT
- 左侧: Pos.TOP_LEFT
- 右侧: Pos.TOP_RIGHT
- 中心: Pos.CENTER
-
- hgap- 此属性的类型为double,表示列之间的水平差距。
- vgap- 属性的类型为double,它表示行之间的垂直间距。
- gridLinesVisible- 此属性是布尔类型,显示表格线
案例一:
public class GridPanedemo extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("gridpane测试");
BorderPane borderpane = new BorderPane();
GridPane gridPane = new GridPane();
gridPane.setStyle("-fx-background-color: #C0C0C0;");
//表格实线
gridPane.setGridLinesVisible(true);
gridPane.setPadding(new Insets(5));
//水平间距
gridPane.setHgap(5);
//垂直间距
gridPane.setVgap(50);
//3列
ColumnConstraints column1 = new ColumnConstraints(100);
ColumnConstraints column2 = new ColumnConstraints(50, 150, 300);
ColumnConstraints column3 = new ColumnConstraints(100);
column2.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(column1, column2,column3);
Label userNameLabel = new Label("用户名");
TextField userNameField = new TextField();
Label passwordLabel = new Label("密码");
PasswordField passwordField =new PasswordField();
Text userNameWarn = new Text("用户名不能为空");
Text passwordWarn = new Text("密码不能空");
Button saveButt = new Button("保存");
// userNameLabel 列 行
GridPane.setHalignment(userNameLabel, HPos.RIGHT);
gridPane.add(userNameLabel, 0, 0);
gridPane.add(userNameWarn,3,0);
gridPane.add(passwordWarn,3,1);
// userNameField
GridPane.setHalignment(userNameField, HPos.RIGHT);
gridPane.add(userNameField, 1, 0);
// passwordLabel
GridPane.setHalignment(passwordLabel, HPos.LEFT);
gridPane.add(passwordLabel, 0, 1);
// passwordField
GridPane.setHalignment(passwordField, HPos.LEFT);
gridPane.add(passwordField, 1, 1);
// Save button
GridPane.setHalignment(saveButt, HPos.RIGHT);
gridPane.add(saveButt, 1, 2);
borderpane.setCenter(gridPane);
Scene scene =new Scene(borderpane,600,500);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
案例二、
public void start(Stage stage) throws Exception {
//舞台名称
stage.setTitle("JavaFX Welcome");
FileInputStream fileInputStream =new FileInputStream("F:\\IDEADemo\\hello\\Snipaste_2022-10-12_20-03-32.jpg");
Image image =new Image(fileInputStream);
stage.getIcons().add(image);
GridPane grid = new GridPane();
//grid.setBackground(new Background(new Image(fileinputStream)));
//GridPane内容居中
grid.setAlignment(Pos.CENTER);
//水平间距
grid.setHgap(10);
//垂直间距
grid.setVgap(10);
//填充:距离上下左右外框
grid.setPadding(new Insets(25, 25, 25, 25));
// grid.setGridLinesVisible(true);
Text scenetitle = new Text("欢迎");
scenetitle.setFont(Font.font("宋体", FontWeight.NORMAL, 20));
//、0列、0行、占用2列、占用1行
grid.add(scenetitle, 0, 0, 2, 1);
Label userName = new Label("账号:");
grid.add(userName, 0, 1);
TextField userTextField = new TextField();
grid.add(userTextField, 1, 1);
Label pw = new Label("密码:");
grid.add(pw, 0, 2);
PasswordField pwBox = new PasswordField();
grid.add(pwBox, 1, 2);
Button btn = new Button("登入");
//登录按钮放到水平布局HBox中方便控制左右
HBox hbBtn = new HBox(10);
hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
hbBtn.getChildren().add(btn);
grid.add(hbBtn, 1, 4);
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
actiontarget.setFill(Color.FIREBRICK);
actiontarget.setText("按下登录按钮");
}
});
Scene scene = new Scene(grid, 300, 275);
stage.setScene(scene);
stage.show();
}
FlowPane布局
public void start(Stage stage) throws Exception {
stage.setTitle("FlowPaneDemo");
Button button1 =new Button("button1");
Button button2 =new Button("button1");
Button button3 =new Button("button1");
Button button4 =new Button("button1");
Button button5 =new Button("button1");
Button button6 =new Button("button1");
FlowPane flow = new FlowPane();
flow.setStyle("-fx-background-color:#f6d3ab");
flow.setPadding(new Insets(10));
//组件的水平间距
flow.setHgap(10);
flow.getChildren().addAll(button1,button2,button3,button4,button5,button6);
Scene scene =new Scene(flow,300,400);
stage.setScene(scene);
stage.show();
}
Titlepane布局 可折叠组件
Content内容、
public void start(Stage stage) throws Exception {
HBox h1 = new HBox();
CheckBox c1 =new CheckBox("ok");
CheckBox c2 = new CheckBox("on");
h1.getChildren().addAll(c1,c2);
TitledPane titledPane = new TitledPane("标题", h1);
//titledPane.setAlignment(Pos.BASELINE_CENTER);
//
GridPane grid = new GridPane();
grid.setVgap(4);
grid.setPadding(new Insets(5,5,5,5));
grid.add(new Button("按钮1"),0,0);
grid.add(new Button("按钮2"),1,0);
grid.add(new Button("按钮3"),0,1);
grid.add(new Button("按钮4"),1,1);
TitledPane titledPane1 =new TitledPane("按钮",grid);
HBox hbox = new HBox(10);
hbox.setPadding(new Insets(20, 0, 0, 20));
hbox.getChildren().setAll(titledPane,titledPane1);
hbox.setAlignment(Pos.BASELINE_CENTER);
Scene scene = new Scene(hbox, 350, 250);
stage.setScene(scene);
stage.show();
}
titledPane1.setGraphic(new Button("text"));
Accordion布局 手风琴布局
可以使用手风琴(accordion)控件对标题窗格进行分组。
public void start(Stage stage) throws Exception {
Group g = new Group();
TitledPane t1 = new TitledPane("T1", new Button("B1"));
TitledPane t2 = new TitledPane("T2", new Button("B2"));
TitledPane t3 = new TitledPane("T3", new Button("B3"));
t3.setText("T3");
t3.setContent(new Button("B3"));
Accordion accordion = new Accordion();
accordion.getPanes().addAll(t1, t2, t3);
g.getChildren().add(accordion);
//accordion事件
accordion.expandedPaneProperty()
.addListener((ObservableValue<? extends TitledPane> ov, TitledPane old_val, TitledPane new_val) -> {
if (new_val != null) {
System.out.println(accordion.getExpandedPane().getText());
}
});
Scene scene = new Scene(g, 550, 250);
stage.setScene(scene);
stage.show();
}
AnchorPane布局(锚定)
锚定布局一般配合其他布局使用
public void start(Stage stage) throws Exception {
stage.setTitle("hello AnchorPane");
HBox hbox =new HBox();
Button b1 =new Button("hello");
Button b2 = new Button("World");
hbox.getChildren().addAll(b1,b2);
AnchorPane acpane = new AnchorPane();
acpane.getChildren().addAll(hbox);
//距离顶部50,距离左边10
AnchorPane.setTopAnchor(hbox,50.0);
AnchorPane.setLeftAnchor(hbox,10.0);
// AnchorPane.setBottomAnchor();
// AnchorPane.setRightAnchor();
Scene scene = new Scene(acpane,500,400);
stage.setScene(scene);
stage.show();
}
stage.setTitle("AbchorDemo");
Button b1 =new Button("b1");
Button b2 =new Button("b2");
//锚点布局
AnchorPane anchorPane =new AnchorPane();
anchorPane.setStyle("-fx-background-color:#e8f2fe");
anchorPane.getChildren().addAll(b1,b2);
//距离Top10.0--可以自动适配屏幕大小
anchorPane.setTopAnchor(b1, 10.0);
anchorPane.setLeftAnchor(b1, 10.0);
anchorPane.setBottomAnchor(b2, 10.0);
//设置内边距
anchorPane.setPadding(new Insets(10));
//false解除父类对b1的管理
//b1.setManaged(false);
//false不可见
//b1.setVisible(false);
//设置透明度
b1.setOpacity(0.1);
anchorPane.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("被点击了");
}
});
Scene scene =new Scene(anchorPane,300,400);
stage.setScene(scene);
stage.show();
TextFlow布局类
public void start(Stage stage) throws Exception {
stage.setTitle("TextFlowDemo");
Text t1 =new Text("t1");
Text t2 =new Text("t2freagrthbagragargaefacw");
Text t3 =new Text("t3");
t1.setFont(Font.font(20));
t1.setFill(Paint.valueOf("#f8f8f8"));
TextFlow textFlow =new TextFlow();
textFlow.setStyle("-fx-background-color:#e1e6f6");
textFlow.getChildren().addAll(t1,t2,t3);
//边距
textFlow.setPadding(new Insets(10));
Scene scene =new Scene(textFlow,300,400);
stage.setScene(scene);
stage.show();
stage.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println(textFlow.getWidth());
}
});
}
TilePane布局
public void start(Stage stage) throws Exception {
stage.setTitle("TilePaneDemo");
Button button1 =new Button("button1");
Button button2 =new Button("button1");
Button button3 =new Button("button1");
Button button4 =new Button("button1");
Button button5 =new Button("button1");
Button button6 =new Button("button1");
TilePane tile =new TilePane();
tile.setStyle("-fx-background-color:#e1e6f6");
tile.setMargin(button1, new Insets(10));
tile.setHgap(10);
//tile.setPadding(new Insets(10));
tile.setAlignment(Pos.BASELINE_CENTER);
tile.getChildren().addAll(button1,button2,button3,button4,button5,button6);
Scene scene =new Scene(tile,300,400);
stage.setScene(scene);
stage.show();
}
DialogPane布局
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("DialogPaneDemo");
BorderPane bP =new BorderPane();
TextArea textArea =new TextArea();
Button button =new Button("帮助");
bP.setCenter(textArea);
bP.setTop(button);
button.setOnAction((e)->{
DialogPane daPe =new DialogPane();
Stage s =new Stage();
s.setTitle("帮助");
daPe.setHeaderText("hello javafx");
daPe.setContentText("the is text");
daPe.getButtonTypes().add(ButtonType.APPLY);
daPe.getButtonTypes().add(ButtonType.CANCEL);
daPe.getButtonTypes().add(ButtonType.CLOSE);
Button apply =(Button) daPe.lookupButton(ButtonType.APPLY);
Button close =(Button) daPe.lookupButton(ButtonType.CLOSE);
ImageView imgImageView =new ImageView("Img/Snipaste_2022-10-17_17-14-25.jpg");
daPe.setGraphic(imgImageView);
//设置扩展内容
daPe.setExpandableContent(new Text("扩展内容"));
daPe.setExpanded(true);//默认打开
Scene sc =new Scene(daPe,400,200);
s.setScene(sc);
//模态化对话框
s.initOwner(stage);
s.initModality(Modality.WINDOW_MODAL);
s.show();
apply.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("apply");
}
});
close.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("close");
}
});
});
Scene scene =new Scene(bP,300,400);
stage.setScene(scene);
stage.show();
}
TabPane和Tab切换面板组件
public void start(Stage stage) throws Exception {
stage.setTitle("TabPaneDemo");
AnchorPane an =new AnchorPane();
TabPane tabPane =new TabPane();
tabPane.setStyle("-fx-background-color: #336699");
tabPane.setPrefWidth(300);
tabPane.setPrefHeight(300);
Tab tab1 =new Tab("tab1");
Tab tab2 =new Tab("tab2");
Tab tab3 =new Tab("tab3");
VBox vBox =new VBox(10);
vBox.setStyle("-fx-background-color: #f7f9ff");
vBox.getChildren().addAll(new Button("button1"),new Button("button2"));
tab1.setContent(vBox);
HBox hBox =new HBox(10);
hBox.setStyle("-fx-background-color: #f77a49");
hBox.getChildren().addAll(new Button("button1"),new TextField("text"));
tab2.setContent(hBox);
tabPane.getTabs().addAll(tab1,tab2,tab3);
an.getChildren().add(tabPane);
Scene scene =new Scene(an);
stage.setScene(scene);
stage.setWidth(600);
stage.setHeight(400);
stage.show();
}