后台管理系统框架搭建

1.新建maven项目bookmanage


image.png

image.png

image.png

image.png

2.新建项目成功后在pom.xml中修改JDK版本,并添加项目所需依赖

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!--Java工具集合的依赖-->
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>4.2.1</version>
    </dependency>
    <!--jdbc的mysql驱动依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
    <!--单元测试依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

Maven Projects视图:


Maven Projects视图

3.src源码根据MVC模式划分子包

  • entity包:存放实体类
  • dao包:存放各个实体的DAO接口
  • controller包:存放各个布局文件对应的控制器类
  • utils包:存放工具类

3.main下新建resources,将其设为资源目录,其下划分各个子目录

  • config:用来存放一些配置文件,如db.setting
  • css:用来存放样式表文件
  • fxml:用来存放布局文件
  • img:用来存放图片

为了做出一个主界面主体框架效果,先建立必须的几个文件,如图:


项目目录结构图

4.启动主类代码MainApp.java,注意各个文件名和代码对应

public class MainApp extends Application {
  @Override
  public void start(Stage primaryStage) throws Exception {
      primaryStage.setTitle("Book Manage System");
      FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/main.fxml"));
      Parent root = fxmlLoader.load();
      Scene scene = new Scene(root);
      //界面最大化
      primaryStage.setMaximized(true);
      //logo设置 
      primaryStage.getIcons().add(new Image("/img/logo.png"));
      primaryStage.setScene(scene);
      primaryStage.show();
  }

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

5.主控制器MainController.java

import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {
    @FXML
    private StackPane mainContainer;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }

   //显示默认主页数据
    public void listDefault() throws Exception {
        switchView("default.fxml");
    }

    //显示图书类别数据
    public void listType() throws Exception {
        switchView("type.fxml");
    }

    //显示图书数据
    public void listBook() throws Exception {
        switchView("book.fxml");
    }

    //封装一个切换视图的方法:用来根据fxml文件切换视图内容
    private void switchView(String fileName) throws Exception {
        //清除主面板之前内容
        ObservableList<Node> list = mainContainer.getChildren();
        mainContainer.getChildren().removeAll(list);
        //读取新的布局文件加入主面板
        AnchorPane anchorPane = new FXMLLoader(getClass().getResource("/fxml/" + fileName)).load();
        mainContainer.getChildren().add(anchorPane);
    }
}

6.主布局文件main.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.image.Image?>
<BorderPane
        xmlns:fx="http://javafx.com/fxml"
        fx:controller="com.soft1841.book.controller.MainController">
    <top>
        <AnchorPane prefHeight="80.0">
            <!--点击这个文字显示默认主页数据-->
            <Label text="图书后台管理系统" onMouseClicked="#listDefault"
                   AnchorPane.topAnchor="20" AnchorPane.leftAnchor="10">
                <!--字体特效-->
                <effect>
                    <Reflection bottomOpacity="0.2" fraction="0.5" topOffset="-5.0"/>
                </effect>
                <font>
                    <Font name="System Bold" size="26.0"/>
                </font>
            </Label>
            <ImageView fitWidth="45" fitHeight="45" AnchorPane.topAnchor="15" AnchorPane.rightAnchor="120">
                <Image url="/img/me.png"/>
            </ImageView>
            <Button text="退出系统" AnchorPane.topAnchor="20" AnchorPane.rightAnchor="20"/>
        </AnchorPane>
    </top>
    <center>
        <!--分割面板-->
        <SplitPane>
            <!--左侧的导航菜单部分-->
            <AnchorPane minWidth="200">
                <!--采用风琴面板实现-->
                <Accordion AnchorPane.leftAnchor="0.0"
                           AnchorPane.rightAnchor="0.0"
                           AnchorPane.topAnchor="0.0">
                    <panes>
                       <!--由标题面板组成,里面嵌入VBox,实现一级目录和二级目录效果-->
                        <TitledPane alignment="TOP_LEFT" text="类别管理">
                            <VBox minHeight="100" spacing="10">
                                <!--点击该按钮,右侧切换图书类别数据-->
                                <Button text="图书类别" onAction="#listType"/>
                                <Button text="分类统计"/>
                            </VBox>
                        </TitledPane>
                        <TitledPane alignment="TOP_LEFT" text="图书管理">
                            <VBox minHeight="100" spacing="10">
                                <!--点击该按钮,右侧切换图书数据-->
                                <Button text="图书信息" onAction="#listBook"/>
                                <Button text="统计分析"/>
                            </VBox>
                        </TitledPane>
                        <TitledPane alignment="TOP_LEFT" text="用户管理">
                            <VBox minHeight="130" spacing="10">
                                <Button text="管理员信息"/>
                                <Button text="读者信息"/>
                                <Button text="统计分析"/>
                            </VBox>
                        </TitledPane>
                        <TitledPane alignment="TOP_LEFT" text="借阅管理">
                            <VBox minHeight="130" spacing="10">
                                <Button text="借阅查询"/>
                                <Button text="统计分析"/>
                            </VBox>
                        </TitledPane>
                        <TitledPane alignment="TOP_LEFT" text="系统维护">
                            <VBox minHeight="130" spacing="10">
                                <Button text="系统初始化"/>
                                <Button text="数据备份"/>
                                <Button text="主题设置"/>
                            </VBox>
                        </TitledPane>
                    </panes>
                </Accordion>
            </AnchorPane>

           <!--右侧的主体内容部分,采用StackPane实现一种卡片切换效果-->
            <StackPane fx:id="mainContainer" minWidth="1060">
                <!--加载外部的fxml文件,显示默认的主体内容-->
                <fx:include source="default.fxml"/>
                <padding>
                    <Insets top="10" left="30" bottom="5" right="10"/>
                </padding>
            </StackPane>
            <padding>
                <Insets top="10"/>
            </padding>
        </SplitPane>
    </center>
</BorderPane>

7.default.fxml,默认的主界面主体内容,暂时先放一个图片占位

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.image.Image?>
<AnchorPane xmlns="http://javafx.com/javafx"
           xmlns:fx="http://javafx.com/fxml"
           fx:controller="com.soft1841.book.controller.MainController">
   <ImageView AnchorPane.topAnchor="20" AnchorPane.leftAnchor="20">
       <Image url="/img/book.jpg"/>
   </ImageView>
</AnchorPane>

8.type.fxml,图书类别数据展示,暂时先放一个文本标签占位

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.Label?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="com.soft1841.book.controller.MainController">
    <Label text="图书类别数据显示"/>
</AnchorPane>

9.book.fxml,图书信息数据展示,暂时先放一个ListView占位

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.image.Image?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="com.soft1841.book.controller.MainController">
    <ListView prefWidth="600" prefHeight="300">
        <HBox spacing="30">
            <Label text="测试书籍"/>
            <Label text="匿名"/>
            <Label text="价格:88.8"/>
            <ImageView fitWidth="100" fitHeight="100">
                <Image url="/img/book.jpg"/>
            </ImageView>
        </HBox>
        <HBox spacing="30">
            <Label text="测试书籍"/>
            <Label text="匿名"/>
            <Label text="价格:88.8"/>
            <ImageView fitWidth="100" fitHeight="100">
                <Image url="/img/book.jpg"/>
            </ImageView>
        </HBox>
        <HBox spacing="30">
            <Label text="测试书籍"/>
            <Label text="匿名"/>
            <Label text="价格:88.8"/>
            <ImageView fitWidth="100" fitHeight="100">
                <Image url="/img/book.jpg"/>
            </ImageView>
        </HBox>
    </ListView>
</AnchorPane>

运行说明

  • 启动主界面,整体是BorderPane布局
  • 顶部显示一些基本信息,点击左侧“图书后台管理系统”文字可以实现“主页”的效果
  • 中间部分由SplitPane分割成左右两块
  • 左侧为一个风琴面板+标题面板,实现左侧导航效果
  • 右侧一个StackPane,由左侧点击不同的功能选项切换不同的布局文件,实现卡片效果,暂时只做了“图书类别”、“图书信息”两个
运行效果图:
  • 启动界面


    启动界面
  • 点击左侧“类别管理”下的“图书类别”功能


    图书类别
  • 点击左侧“图书管理”下的“图书信息”功能


    图书信息
  • 点击左上角“图书后台管理系统”文字,可切换到默认主页


    image.png

附需要用到的图:


book.jpg
logo.png
me.png

v1.0版功能演示:https://www.screencast.com/t/RpD8lvLP

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

推荐阅读更多精彩内容