技术标签: 图书管理系统 ● J2SE入门级项目 J2SE 系统主界面 ------【图书管理系统】
视图层:com.java.view;
1.MainFrm类:
首先在视图层里新建一个MainFrm类:
在view里面新建一个MainFrm类:右键点击view包->new->Other->WindowBuilder->Swing Designer->JFrame类;
建好以后在Designer上面添加一些功能控件:
这里都是一些基本的控件和按钮,图标可以用我们之前的images包里面导入的图标;
其中:图书类别管理、图书管理...这一 行开始加一个JMenuBar,然后加很多JMenu或者JMenuItem;
JMenu(类似于数据结构中的非根节点)下面还可以加很多JMenu或者JMenuItem;
而JMenuItem(类似于叶子节点)下面什么都不能加;
(1) 可以在Source代码里面添加使MainFrm窗体最大化的代码;
这样运行之后的MainFrm窗体就自动最大化了,不需要再点击那个最大化的控件;
(2) 根据登录界面LogOnFrm的逻辑,当用户登录成功后,应该销毁弹出来的"登录成功!"的窗体,
直接进入系统主界面MainFrm的界面;
打开LogOnFrm的源代码,将登录事件的代码修改一下:
// 进行数据库连接
User user=new User(userName,passWord);
Connection con = null;
try {
con=dbUtil.getCon();
/**
* 将从数据库中获取的用户信息保存在currentUser里面,
* 若为null,则表示从数据库里获取的信息和从用户登陆界面获取的信息不一致,
* 即登录失败
*/
User currentUser=userDao.login(con, user);
if(currentUser!=null){
//JOptionPane.showMessageDialog(null, "登录成功!");
//销毁"登录成功!"的窗口
dispose();
//将系统主界面显示出来
new MainFrm().setVisible(true);;
}else{
JOptionPane.showMessageDialog(null, "用户名或密码错误!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(3) 我们将两个窗体都设置为居中显示;
LogOnFrm类:
MainFrm类:
这样就可以了!
(4)我们测试一下;
运行LogOnFrm类:
点击登录成功后,会自动转到系统主界面MainFrm的窗口:
即测试成功!
2.about(关于我们)窗体:
后面会有很多比如图书管理窗体,图书类别管理窗体,这些窗体都是MainFrm的内部窗体!
因此要在主窗体上面加一个JDesktopPane控件,相当于在MainFrm上面放一个桌子,
再在桌子上面放其他东西(图书管理窗体、图书类别管理窗体);
我们在view里面新建一个About_us_InterFrm类:
右键点击view包->new->Other->WindowBuilder->Swing Designer->JInternalFrame类;
建好之后在Designer上添加一些控件:
(1)将desktopPane重命名为table;
(2)给MainFrm窗体中的"关于我们"控件添加事件处理;
右键"关于我们"->Add event handler->action->actionPerformed;
系统会自动在Source里面生成对应的方法:
然后我们在方法里写如上代码 ;
注意:这里我们首先将MainFrm窗体中的desktopPane重命名为table后,
系统自动实例化的代码会出现在"关于我们"这个方法的后面,因此在调用table.add方法时会出现错误,
因此我们要将table实例化的代码写在"关于我们"这个方法之前!
(3)进行测试;
打开MainFrm中的"关于我们"后,会出现About_us_InterFrm这个窗体!
3.安全退出窗体:
我们在MainFrm窗体中的"安全退出"控件添加事件处理:
右键"安全退出"->Add event handler->action->actionPerformed;
系统会自动在Source里面生成对应的方法:
在方法里,当我们点击"安全退出"时,系统会弹回一个"是否退出系统"的提示框:
这个提示框是调用 JOptionPane.showConfirmDialog(null, "是否退出系统?") 这个对话框;
其中返回的是Int类型的三个值(0,1,2),0表示"是",1表示"否",2表示"取消";
我们写一个判断语句,如果返回的是0,则调用dispose()方法销毁当前窗口!
我们进行测试,进入MainFrm窗口,点击安全退出,然后点击弹出来的对话框里面的"是";
我们会发现以及安全退出系统了!
文章浏览阅读283次。1,com.alibaba.easyexcel <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>import com.al_java读写excel
文章浏览阅读3.5k次。转载于http://blog.csdn.net/xy6zzz/article/details/699526301.sudo modprobe vcan加载虚拟can模块2.sudo ip link add dev vcan0 type vcan添加vcan0网卡3.ifconfig -a 可以查到当前can网络 can0 can1,包括收发包数量、是_sudo modprobe vcan sudo ip link add name vcan0 type vcan sudo ip link set de
文章浏览阅读2.3k次。TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要。从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。但是,如果想要在这个领域达到融会贯通的地步,不打下坚实的基础是不可想象的。正如Richard S_网络安全 四书五经
文章浏览阅读2.5k次。vim - vi 增强版。文本编辑器格式:vim [options] [file ..]说明:如果file存在,文件被打开并显示内容,如果文件不存在,当编辑后第一次存盘时创建它[options]常用选项:vim +[num] :直接进入到编辑文挡的第num行vim + :直接进入到最后一行vim +/PATTERN :直接跳转到模式PATTERN第一次匹配到的行vim -m :只读方式打开文件..._vi get ff
文章浏览阅读6.8k次,点赞10次,收藏97次。端口被占用解决方法1 Windows环境1 启动windows命令窗口2 查看系统当前所有端口使用情况3 查询指定的端口使用情况4 可通过进程id号查询进程名称5 根据进程id或进程名称杀死进程2 Linux1 查看所有端口号2 查看指定端口号3 查看端口号被那个进程使用4 杀死进程因博主在windows环境下,IDEA突然崩溃,导致程序异常终止,再次启动程序时,提示端口被占用,故记录一下解决该类问题的方法参考资料:https://jingyan.baidu.com/article/fdffd1f_系统空闲进程占用端口
文章浏览阅读1.1k次。IDEA使用tomcat插件不加载Maven项目,tomcat启动后自动结束tomcat不加载项目的解决方法方法1:方法2:IDEA配置tomcat步骤1:步骤2:步骤3:步骤4:tomcat不加载项目的解决方法下面有两种方法使用其中任意一种即可解决该问题方法1:pom.xml配置文件中加入项目的打包方式。<packaging>war</packaging>方法2:pom.xml 配置文件中,增加 tomcat 的配置,忽略打包,build 放在 project 标_idea tomcat无法加载项目
文章浏览阅读538次。1、qmlRegisterType 是一个可以将C++实现的类在QML中调用的,连接C++和QML的一个工具。总共4个参数,分别为:1)* uri指的是QML中import后的内容,相当于头文件名;2)主版本号;3)次版本号;4)QML中类的名字。例如:c++ 文件 qmlRegisterType(“com.user”, 1, 0, “UserControl”);qml 引用:import com.user 1.02、qRegisterMetaType在定义信号槽的时候,传递的参数类型不一定是_qt qmlregistertype
文章浏览阅读1.1w次。docker删除无用的none镜像docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stopdocker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rmdocker images|grep none|awk '{print $3 }'|xargs d..._docker 删除为none的镜像
文章浏览阅读504次,点赞3次,收藏2次。本文介绍 PPO 这个 online RL 的经典算法,并在 CartPole-V0 上进行测试。由于 PPO 是源自 TRPO 的,因此也会在原理部分介绍 TRPO_cartpole rl
文章浏览阅读902次。今天我们来学习最后一个行为型设计模式:中介模式。中介模式也属于不怎么常用的模式,应用场景比较特殊,所以,中介模式也不是学习的重点,稍微了解一下。概述中介模式:(Mediator Design Pattern)定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。实际上,中介模式的设计思想跟中间层很像,通过引入_中介模式的作用是什么
文章浏览阅读118次。五金冲压模具的形式很多,冲模也依工作性质,模具构造,模具材料三方面来分类。根据工艺性质分类a.冲裁模 沿封闭或敞开的轮廓线使材料产生分离的模具。如落料模、冲孔模、切断模、切口模、切边模、剖切模等。b.弯曲模 使板料毛坯或其他坯料沿着直线(弯曲线)产生弯曲变形,从而获得一定角度和形状的工件的模具。c.拉深模 是把板料毛坯制成开口空心件,或使空心件进一步改变形状和尺寸的模具。d.成形模 是将毛坯或半成品工件按图凸、凹模的形状直接复制成形,而材料本身仅产生局部塑性变形的模具。如胀形模、缩口模、扩口模、起
文章浏览阅读905次,点赞25次,收藏15次。1.背景介绍1. 背景介绍自然语言处理(NLP)是计算机科学和人工智能领域的一个分支,旨在让计算机理解、生成和处理人类语言。语义理解是自然语言处理中的一个关键问题,它涉及到计算机对于自然语言文本的深度理解,以便进行有意义的信息抽取和推理。深度学习是一种人工智能技术,它通过模拟人类大脑中的神经网络结构,使计算机能够从大量数据中自动学习复杂的模式和特征。深度学习在自然语言处理领域取得了显著..._深度学习 语义理解