断断续续学习JAVA语言,写了一个多月数据库大作业,终于在五一过后写完了。由于第一次使用JAVA和数据库,遇到了许多问题,记录下来,以备以后查看。

我使用的JAVA SE,说实话,在开发后期,觉得JAVA还是EE比较好使,感觉桌面开发JAVA SE没有比Delphi有什么优势。只是考虑到不会Pascal,也不会JAVA,反正利用这个机会,学一学JAVA语言,感觉Pascal么有JAVA应用广,所以入坑了JAVA。

JAVA有一个很不错的入门教程:http://www.runoob.com/java/java-tutorial.html

Swing说实话还是自己码代码比较自由,但是由于时间关系,还是使用了第三方插件Eclispe下的WindowBuilder。

Swing也有一些美化包:BeautyEye https://www.oschina.net/p/beautyeye?fromerr=MxoPrtJ5

JGoodies:http://www.oschina.net/p/jgoodies+look+feels/?fromerr=Yi99jkcA

以及有Swing教程:http://www.runoob.com/w3cnote/java-swing-demo-intro.html

其实这种集成的控件最大的缺点就是不好修改。像我的3K分辨率,被分辨率问题搞了好半天,而且由于分辨率问题,InternalJFrame根本没法用,只好全程使用JFrame。毕竟时间有限,也没时间研究。言归正传:

一、JFrame使用生成窗口:

setTitle("\u56FE\u4E66\u7BA1\u7406\u5458\u7CFB\u7EDF\u4E3B\u754C\u9762");//添加标题
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//设置关闭模式:EXIT_ON_CLOSE是退出系统,这时候所有窗口都关闭了。这里WindowConstants.DO_NOTHING_ON_CLOSE为不对关闭按钮做任何操作

//还可以使用setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);为释放当前窗口

setBounds(0, 0, screenWidth, screenHeight);//初始化窗口位置和大小
//加入一个顶层容器
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);

如果只要设置大小,还可以

setSize(new Dimension(screenSize.width,screenSize.height));

很重要的一点,捕获分辨率

//设置跟随分辨率变化窗口
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
private int screenHeight = (int) screenSize.getHeight();
private int screenWidth = (int) screenSize.getWidth();
private double enlargement_x=screenWidth/1920;
private double enlargement_y=screenHeight/1080;

窗口居中显示:

windowWidth = this.getWidth(); //获得窗口宽
windowHeight = this.getHeight(); //获得窗口高
this.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2 -windowHeight / 2);//设置窗口居中显示

设置最大化

//设置JFrame最大化,要放在setVisible之后才能刷新,否则只执行一次
this.setExtendedState(Frame.MAXIMIZED_BOTH);

二、其他控件使用

这次图书管理系统使用了常见的控件:

JLabel用于添加标题,以及作为盛放图片的容器。

JTextField用于供用户输入的单行文本框

JTextArea用于供用户多行文本输入

注意默认的是文字到边框是不会换行的,若想是得文字输入到右边框出换行,应加入以下代码:

bookDescTxt.setLineWrap(true);//bookDescTxt是一个JTextArea对象

JButton按钮

JComboBox下拉框

JTable插入表格

JMenuBar用于放置Jmenu,也就是菜单栏。与之配套的有JMenu为一条菜单,可以再往下面和右边添加一条菜单。JMenuItem只能在其下面添加条目。

三、容器:

Swing里面所有的控件都要放置在容器里面。而且这样有一点好处,那就是将容器置为不可见,那么其上面所有控件都不见了。正如其名,容器好处在于可以整体控制控件的布局,做到打包处理。

做多用的就是Jpanel.此外还有JDeskToppane用于放置许多InternalFrame,但是由于没有用InternalFrame,自然也没用了。

还使用了放置表格JTable的容器:JScrollPane,用于产生一个滑动条,便于翻阅表格数据。

还有做到分屏的JSplitPane,这样可以左边放置各种导航面板,右边根据导航面板显示相应的内容。

四、布局管理器:

将控件加入面板以后可以使用绝对布局,规定他们实际位置。也可以用布局管理器。

在WindowBuilder下拖动控件后,会自动生成代码。可能并不太完美,还要自己调整一下。

用到的布局有GroupLayout,就是按相随位置自由摆放。但感觉在WindowBuilder中调整起来还是有些麻烦。常见的代码有:

GroupLayout gl_TutorJp = new GroupLayout(TutorJp);//新建一个GroupLayout管理器
TutorJp.setLayout(gl_TutorJp);//将其放到容器中
//设置水平方向布局
gl_TutorJp.setHorizontalGroup(
gl_TutorJp.createParallelGroup(Alignment.LEADING)
.addComponent(SearchJIF, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 736, Short.MAX_VALUE)

//加入控件,第三个到第五个参数一次是水平方向控件长的最小值,当前显示值(推荐值),最大值
.addComponent(ID_JIF, GroupLayout.DEFAULT_SIZE, 736, Short.MAX_VALUE)
.addComponent(RecomJIF, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 736, Short.MAX_VALUE)
.addComponent(ExitJPL, GroupLayout.DEFAULT_SIZE, 741, Short.MAX_VALUE)
.addGroup(gl_TutorJp.createSequentialGroup()
.addGap(263)
.addComponent(WwlcomeJL)
.addContainerGap(342, Short.MAX_VALUE))//间隙也作为一种元件添加进去,用于控制元件间间隙。
);
//设置垂直位置
gl_TutorJp.setVerticalGroup(
gl_TutorJp.createParallelGroup(Alignment.LEADING)
.addGroup(gl_TutorJp.createSequentialGroup()
.addComponent(SearchJIF, GroupLayout.PREFERRED_SIZE, 459, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(ID_JIF, GroupLayout.PREFERRED_SIZE, 491, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(RecomJIF, GroupLayout.DEFAULT_SIZE, 298,GroupLayout.PREFERRED_SIZE )
.addComponent(ExitJPL, GroupLayout.PREFERRED_SIZE, 260, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 40, Short.MAX_VALUE)//
.addComponent(WwlcomeJL)
//.addGap(47)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)//Short.MAX_VALUE
)
);

网状布局:

contentPane.setLayout(new GridLayout(2,1,10,10));//分成2行1列。后面两个是行间距和列间距
//按顺序为添加进去控件
contentPane.add(new PieChart(TypeBuffer,TypeNum).getChartPanel()); //添加饼状图
contentPane.add(new BarChart(TypeBuffer,TypeNum).getChartPanel());//添加柱形图

详细教程见:http://www.yiibai.com/swing/home.html

图书管理系统总结——JAVA Swing控件简介的更多相关文章

  1. java笔记--使用事件分配线程更新Swing控件

    使用事件分配线程更新Swing控件: Swing并不是线程安全的,如果在多个线程中更新Swing控件,则很可能造成程序崩溃. 为了避免这种问题,可以使用时间分配线程来更新Swing控件. EventQ ...

  2. 运用 BoxLayout 进行 Swing 控件布局

    摘自http://www.cnblogs.com/fnlingnzb-learner/p/6008572.html 运用 BoxLayout 进行 Swing 控件布局 对于初学 Java Swing ...

  3. java浏览器控件jxbrowser(简单demo模拟自动登录与点击)

    写在前面: 老大让我写个脚本自动给他写dms有一段时间了,说实话当时不知道老大指的这个脚本是什么?毕竟是做web的,难道是写个数据库sql语句脚本吗?也就放在了一边.巧了,最近一个朋友说他之前写了个程 ...

  4. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  5. XLSReadWrite控件简介

    2015-10-22  23:57:55 原帖地址:http://www.cnblogs.com/dabiao/archive/2011/07/08/2100609.html XLSReadWrite ...

  6. ADO面板上的控件简介

    ADO面板上的控件简介 一. TADOConnection组件该组件用于建立数据库的连接.ADO的数据源组件和命令组件可以通过该组件运行命令及数据库中提取数据等.该组件用于建立数据库的连接,该连接可被 ...

  7. Java Me-List控件的用法案例

    /** * Java Me-List控件的用法案例 */package com.xushouwei.cn; import java.io.IOException;import javax.microe ...

  8. EasyUI:datagrid控件简介

    EasyUI:datagrid控件简介 1,水平滚动条属性: //显示滚动条 fitColumns:false //不显示滚动条 fitColumns:true

  9. 图书管理系统(Java实现,十个数据表,含源码、ER图,超详细报告解释,2020.7.11更新)

    图书管理系统数据库设计实验报告 文章目录 更新日志 1.概述 2.需求分析 2.1需要实现的功能 2.2业务流程图 2.2.1学生流程图 2.2.2管理员流程图 2.2.3超级管理员流程图 2.3功能 ...

随机推荐

  1. 解决虚拟机linux系统全屏问题

    修改设置 1) 如下图右单击虚拟机名,选择[settings-],调出虚拟机设置界面. 2) 在设置界面选择[hardware]->[CD/DVD2(IDE)]->[Connection] ...

  2. go闭包使用

    1.带参数闭包函数 func main() { //先调用闭包外面的方法传给变量 add_func := add(1, 2) //再调用里面的方法,因为有了i++ 同一个内存地址 在一次编译中i的值会 ...

  3. Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案

    因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...

  4. Apache Shiro 反序列化漏洞分析

    Shiro550 环境搭建 参考:https://www.cnblogs.com/twosmi1e/p/14279403.html 使用Docker vulhub中的环境 docker cp 将容器内 ...

  5. python一对一教程:Computational Problems for Physics chapter 1-B Code Listings 1.7 - 1.12

    作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 . 本博客为一对一辅导学生python代码的教案, 获得学生允许公开. 具体辅导内容为<Computati ...

  6. GDI绘制Winform工作流组件、具有独立图层的增删处理、防PPT效果

    最近接了个小项目10K.用了2个下班时间写完,共花费了6-7个小时完成.如有同类需求的可以与本人联系,QQ:120772981 功能目标: 需要写一个仿PPT画泳道图的组件.之前写过工作流的组件,其实 ...

  7. JAVA后端方面,如何快速达到能实习的程度

        概要地讲,是先广度再深度,面试开发两手抓. 首先说学习方法,因为很多初学者没继续下去,不是能力不行,而是方法不当.对比下错误和正确的方法. 1 光看视频光看资料不动手连,这样转眼就忘.正确的做 ...

  8. 【PS】证件照转换背景色

    证件照转换背景色 2019-07-14  12:18:49  by冲冲 1. 需求 自由切换证件照的背景颜色(白底.蓝底.红底...) 2. 步骤 ① 双击 图层锁 解锁,弹出的"新建图层0 ...

  9. 关于Jmeter线程组的设置,看这一篇就够了

    一.事件背景 个人感觉自己做性能测试,可以说是轻车熟路了,而且工作多年一直都是这一套测试思路及体系,从未质疑过自己,也许是狮子座的迷之自信吧! 也就在上周让我对自己的测试方法及体系产生了质疑! 为什么 ...

  10. 洛谷 P3270 - [JLOI2016]成绩比较(容斥原理+组合数学+拉格朗日插值)

    题面传送门 考虑容斥.我们记 \(a_i\) 为钦定 \(i\) 个人被 B 神碾压的方案数,如果我们已经求出了 \(a_i\) 那么一遍二项式反演即可求出答案,即 \(ans=\sum\limits ...