1.客户端项目GUI
GUI的发展历程:awt->Swing
2.简单的签到任务项目(SigninDemo)
用户:注册/登录
签到:签到/签到信息(用户名、时间、IP地址、备注)
2.1 业务功能分析
- 页面【Swing】
- 登录界面
- 注册页面
- 签到页面
- 业务处理【JavaSE】
- 数据存储【集合】
2.2 项目创建
更改package结构:左侧Package项目栏右上角倒三角->Package Presentaction->Hierarchical
创建步骤:选择包名->右击->New->Other->Windowbuilder->Swing design->JFrame
有两种模式(模式切换:workspace左下角):
- Source–源码–可以自己进行源码编写
- Design–图形化设计界面
- components—放的是整个页面中的元素的关系结构
- properties—对当前选中的元素的设计
- palette—所有页面元素【组件、菜单、布局等】
- 右侧界面—设计区域【显示窗体】
设计页面的步骤:
①创建窗体——JFrame
②放置画布——JPanel
③设置画布布局——Layout
absolute布局–自由发挥
④放置页面元素
JLabel–文本框
JTextField–文本输入框
JButton–按钮
JMenuBar–导航栏
JMenu–导航栏选项
JMenuItem–导航栏子选项
JToolBar–工具栏
添加事件:右击->Add event handler->action
2.2.1 登录界面(LoginView)
登录事件: |
---|
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//测试:输出语句
//System.out.println("不要点我!");
loginFun(e);
}
});
/**
* 登录操作的业务办法
* @param e
*/
protected void loginFun(ActionEvent e) {
//弹出框
JOptionPane.showConfirmDialog(this, "您确认需要提交登录?", "提示", JOptionPane.OK_CANCEL_OPTION);
//获取信息
String uname = textField.getText();
String password = textField_1.getText();
//输出
//System.out.println("用户名:"+uname);
//System.out.println("密码:"+password);
//判断
if("admin".equals(uname)&&"123456".equals(password)){
//主页面显示
MainView mainView = new MainView();
mainView.setVisible(true);
//登录页面关闭
this.setVisible(false);
//弹出框
JOptionPane.showConfirmDialog(this, "您确认需要提交登录?", "提示", JOptionPane.OK_CANCEL_OPTION);
}
}
退出事件: |
---|
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//调用退出方法
exitFun(e);
}
});
/**
* 退出
* @param e
*/
protected void exitFun(ActionEvent e) {
//弹出框
int i=JOptionPane.showConfirmDialog(this, "您确认退出系统吗?","提示",JOptionPane.OK_CANCEL_OPTION);
System.out.println("得到数据:"+i);
if (i==0) {
//退出
System.exit(0);
}
}
2.2.2 主页面(MainView)
添加页面信息:[JLabel]用户、时间、IP、备注/+[JTextField]
添加签到按钮:[JButton]签到
设置时间和IP不可编辑,从系统中获取。(将editable属性改为false)
编写获取时间方法: |
---|
//显示当前日期
textField_1.setText(new SimpleDateFormat("yyyy-MM-dd E hh:mm:ss").format(new Date()));
编写获取IP地址方法: |
---|
//放IP地址
try {
textField_2.setText(InetAddress.getLocalHost().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
存储数据 |
---|
在签到页面旁边添加一个JPanel
页面上方添加搜索框(JTextField) +查询按钮(JButton)
下方添加JScrollPane,以及在JScrollPane插入JTable
当点击签到按钮时,数据添加进表格。
(1)获取表格数据模型
DefaultTableModel tmodel = (DefaultTableModel)table.getModel();
(2)设置标题
tmodel.setColumnIdentifiers(new Object[]{"姓名","时间","IP地址","备注"});
(3)设置签到按钮方法(signInFun())
/**
* 签到按钮的方法
* @param e
*/
protected void signInFun(ActionEvent e) {
//获取信息
String uname=textField.getText();
String utime=textField_1.getText();
String uip=textField_2.getText();
String uremark=textField_3.getText();
//获取表格模型
DefaultTableModel ttmodel = (DefaultTableModel)table.getModel();
//添加数据
ttmodel.addRow(new Object[]{uname,utime,uip,uremark});
}
(4)设置数据显示页面开关
业务逻辑:添加“查看签到信息”按钮,当点击该按钮时,会在右侧展开表格;再次点击时关闭。
注意:这里需要注意窗体大小,当未点击“查看签到信息”按钮时(key为true时),只显示签到主页面,即只显示签到页面大小;打开后(key为false时),显示整个页面大小,关闭后缩小为之前大小。
(5)添加一个布尔型变量,进行判断
private boolean key=true;
//用于显示签到信息--开关算法
protected void showSignMsg(ActionEvent e) {
//判断
if (key) {
//显示
this.setBounds(100, 100, 850, 610);
//修改开关状态
key=false;
}else {
this.setBounds(100, 100, 440, 610);
//修改开关状态
key=true;
}
}