JavaFX.主页制作

目录

目标

 舞台Stage设置

整体布局与工具栏

主体框架设置

搜索区域

商品显示区域


目标

工具栏的使用

更多布局面板的使用

自定义复杂布局

完成商城的首页数据展示功能,效果图如下

 舞台Stage设置

给舞台设置上图标

primaryStage.getIcons().add(new Image("file:D:\\icons\\index\\slogan.png"));

 完整代码

primaryStage.setTitle("天天商城"); primaryStage.setResizable(false); primaryStage.setScene(new Scene(borderPane, 500, 350)); primaryStage.getIcons().add(new Image("file:D:\\icons\\index\\slogan.png")); primaryStage.show();

整体布局与工具栏

主体框架分析如上,我们可以采用 BorderPane 

//主页设置

BorderPane borderPane = new BorderPane();

对于工具栏,FX也提供了对应的控件 ToolBar 工具栏 , MenuButton 菜单按钮

 工具栏中可以直接放入组件 也就是说 Button , ChoiseBox 等控件都可以直接放

这里我们选择使用 菜单按钮 是因为该按钮可以绑定菜单项 从而实现下拉功能

 

//菜单栏

MenuButton b1 = new MenuButton("商品管理");

//菜单 b1 的菜单项

MenuItem t1 = new MenuItem("商品新增");

MenuItem t2 = new MenuItem("商品删除");

MenuButton b2 = new MenuButton("类别管理");

//菜单 b2 的菜单项

MenuItem t3 = new MenuItem("类别新增");

MenuItem t4 = new MenuItem("类别删除");

//创建工具栏 并对菜单进行绑定

ToolBar barCtl = new ToolBar(b1, b2);

将菜单与菜单项进行绑定

b1.getItems().add(t1);

b1.getItems().add(t2);

b2.getItems().add(t3);

b2.getItems().add(t4);

将工具栏放入布局的上方

borderPane.setTop(barCtl);

主体框架设置

 观察可以发现主体部分也可以采取边框布局设置,不过在此处,我们选择换一个布局来实现它 SplitPane 分割面板

与边框布局不同,这个布局的方向只能是水平的或者是垂直的,可以放入多个控件或者布局,会为每个控件生成一个分割条,我们可以 通过拉动他来改变控件或者布局占据的空间大小

 大致情况如下,此处为水平的分割面板

 

布局代码如下 

//分割面板

SplitPane splitPane = new SplitPane();

我们使用分割面板将页面分为上下两块

上: 商品搜索控件,且全部水平排列,可以使用 HBox

下:商品数据显示区域,因为商品数据比较多,页面存放不下这么多数据,需要该容器为滚动面板 ScrollPane ,在内容溢出的 情况下会自动出现滚动条。其内部的商品条目都是垂直排列,可以使用 VBOX

 

布局代码

VBox vBox = new VBox();

ScrollPane scrollPane = new ScrollPane(vBox);

主体部分代码

//分割面板

SplitPane splitPane = new SplitPane();

//搜索部分

HBox hBox = new HBox();

//内容显示部分

VBox vBox = new VBox();

ScrollPane scrollPane = new ScrollPane(vBox);

主框架完整代码

//工具栏

borderPane.setTop(barCtl);

//分割面板

borderPane.setCenter(splitPane);

//设置搜索区域的间隙为5

hBox.setSpacing(5);

//设置搜索区域的整体控件居中

hBox.setAlignment(Pos.CENTER);

//分割面板设置

splitPane.getItems().addAll(hBox, scrollPane);

//此处是设置分割线的为值 (第几根分割线,占内容大小比例)

splitPane.setDividerPosition(0, 0.1);

//分割面板默认是水平分排列 需要改为垂直排列 splitPane.setOrientation(Orientation.VERTICAL);

 

搜索区域

 Label l1 = new Label("🔍");

ChoiceBox cateCtl = new ChoiceBox();

ChoiceBoxorderCtl = new ChoiceBox();

TextField nameCtl = new TextField();

第一个下拉框存放的是商品分类,所以我们绑定的类型是 Category ,并需要将数据库数据查询并进行绑定

 注意:数据库中是没有 全部 这个分类数据的,该数据显示在这里是为了方便搜索,同时该数据是由手动添加的

//查询数据库分类数据

List cateList = categoryDao.list();

//手动添加分类,并设置id为-1,到时候只要判断id是否为-1就能知道用户是否选了全部 cateList.add(0, new Category(-1, "全部"));

//数据绑定

cateCtl.getItems().addAll(cateList);

//必须配置转换器 否则数据无法识别

cateCtl.setConverter(new StringConverter<>() {

@Override

public String toString(Category category) {

return category.getName();

}

@Override

public Category fromString(String s) {

return null; }

});

//设置默认选中第0个选项

cateCtl.setValue(cateCtl.getItems().get(0));

对于排序下拉框而言,我们可以直接绑定 String 的值,但是取值的时候需要依次做判断,比较繁琐,我们九可以选择对象绑定的写法, 为该选项生成对应的对象类型,取值的操作就会简化很多

public class Option {

//这个值用于显示

private String property;

//这个值放的是 列名+排序规则(升序,降序)

//如果做查询 只要拿到该值然后做sql拼接就行了

private String value;

进行数据绑定该数据由我们手动定义,数据库中没有对应数据

orderCtl.getItems().addAll(

new Option("全部", ""),

new Option("时间升序", " create_time asc"),

new Option("时间降序", " create_time desc"),

new Option("价格升序", " price asc"),

new Option("价格降序", " price desc")

);

orderCtl.setConverter(new StringConverter<>() {

@Override

public String toString(Option option) {

return option.getProperty();

}

@Override

public Option fromString(String s) {

return null;

}

});

orderCtl.setValue(orderCtl.getItems().get(0));

商品显示区域

该区域的主要难点是 自定义布局:

多种布局嵌套 整个大区域是一个滚动面板,在滚动面板中存在一个 VBox 垂直面板,这个我们在上面分析了 那么在这里,还需要完成的则是这一块的布局:

对于每个商品的显示,我选择使用了 TitledPane 标题面板 ,这个面板的特点:

1:面板具备对应的标题,可以用来放商品的名字 

2:具备折叠功能,可以让页面看上去不是那么拥挤,点开折叠则可以查看商品内容与操作 基本使用

//定义标题面板

TitledPane titlePane = new TitledPane();

//设置面板标题

titlePane.setText("xx");

//设置面板是否展开

titlePane.setExpanded(false);

//设置面板是否可以折叠

titlePane.setCollapsible(true);

对于每个标题面板,其中的商品内容也是采用了多个控件与布局衔接的方式做出来的

大致思路如下:

构建标题面板 TitledPane ,面板中放入一个边框布局 BorderPane

边框布局的左边放一个图片控件 ImageView ,右边放一个垂直布局 VBox

向 VBox 布局中依次放入多个标签 Label ,商品价格,商品描述,商品创建时间

向 VBox 布局放入 HBox 布局,并向 HBox 布局中放入两个按钮

 完整代码

//生成商品展示内容

//获得数据库商品数据

goodsDao.list(name, sql).forEach(g -> {

//标题面板设置

TitledPane titlePane = new TitledPane();

titlePane.setText(g.getName());

titlePane.setExpanded(false);

titlePane.setCollapsible(true);

//此处需要设置为当前Stage的宽度稍小一点

//不然占不满一行

titlePane.setPrefWidth(500 - 20);

BorderPane borderPane = new BorderPane();

//设置标题面板的内容

titlePane.setContent(borderPane);

//生成图片控件

//根据商品的cover属性设置图片

//并设置空间大小

Image image = new Image("file:" + g.getCover());

ImageView imageView = new ImageView(image);

imageView.setFitWidth(80);

imageView.setFitHeight(80);

borderPane.setLeft(imageView);

//标签设置

Label l1 = new Label("商品价格: " + g.getPrice().toString());

Label l2 = new Label("商品描述: " + g.getDescription().toString());

Label l3 = new Label("商品创建时间: " + g.getCreateTime().toString());

//HBox区域

Button buy = new Button("购买");

Button car = new Button("添加购物车");

HBox h1 = new HBox(buy, car); h1.setSpacing(3);

VBox v1 = new VBox(l1, l2, l3, h1); v1.setSpacing(5);

borderPane.setCenter(v1);

//【这个地方注意了 是使用getChildren()来获得控件集合】 vBox.getChildren().add(titlePane); });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaFX 制作界面的一般步骤如下: 1. 创建一个 JavaFX 应用程序,继承自 javafx.application.Application 类,并实现 start() 方法。 2. 在 start() 方法中创建一个 Stage 对象,设置窗口标题、大小等属性。 3. 创建一个或多个 Scene 对象,设置场景的布局和组件。 4. 将 Scene 对象设置为 Stage 的场景,显示窗口。 5. 在 Scene 中添加各种控件,例如按钮、标签、文本框等。 6. 通过 Java 代码或者 FXML 文件设置控件的属性,例如文本框的提示文本、按钮的事件处理器等。 7. 使用 CSS 样式来设置控件的样式,例如字体、颜色、背景等。 8. 运行应用程序,查看界面效果。 下面是一个简单的 JavaFX 界面制作示例: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class MyJavaFXApp extends Application { @Override public void start(Stage primaryStage) { // 创建一个按钮 Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(event -> System.out.println("Hello World!")); // 创建一个场景,并将按钮添加到场景中 StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); // 将场景设置为窗口的场景,并显示窗口 primaryStage.setTitle("My JavaFX App"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 这个示例创建了一个简单的窗口,并在窗口中添加了一个按钮。点击按钮会输出 "Hello World!" 到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值