22 聆风企业仓库管理系统
5.3.3.1 登陆模块设计
系统登录模块是项目必须开发的模块,它是系统的安全门,只有提供了正确的用户名和密码才可以进入系统。登录模块的设计有两部分组成,一部分是登录窗体,另一部分是窗体中带背景的面板。首先介绍窗体设计:
所有的组件都要布置在窗体内容面板上,而登录的内容面板使用了背景图片,这就继承了Swing和JPanel类编写自己的面板类,然后将该面板作为窗体的内容面板。程序代码如下:
图6 登陆窗口
import java.awt.*; import java.net.URL;
import javax.swing.*;
import java.awt.Dimension;
public class LoginPanel extends JPanel {
public int width, height; private Image img;
public LoginPanel() { //创建背景图片 }
protected void paintComponent(Graphics g) {//重写父类的组件绘制方法
super();
URL url = getClass().getResource(\);//获取图片Url img = new ImageIcon(url).getImage();//初始化image对象
内蒙古农业大学学士学位论文 23
}
}
super.paintComponent(g);
g.drawImage(img, 0, 0, this);//在面板的左上角开始绘制背景图片
接下来介绍登陆窗体的创建。创建LoginDialog类,该类继承了JFrame类,成为一个窗体。设置窗体的标题为“系统登录”,设置内容面板为LoginPanel类的对象。该窗体用于布置各种组件,来实现系统登录的界面。此处技术实现简单,代码展示忽略,详见系统src文件夹下。
接下来就是登录模块上的事件处理:“密码”文本框上的回车事件、“登录”按钮的事件处理。首先看回车事件,等用户输入好密码后,点击回车就会相当于点击界面上的登录按钮。实现代码如下:
private JPasswordField getPasswordField() {
}
“登录”按钮的事件处理:当用户点击登陆按钮后首先要获取用户名和密码 文本框中的内容,同时添加非空判断,防止出现异常。获取两个数据后就要连接数据库,匹配用户名和密码,匹配了就进入主窗体,没有返回信息“用户名或密码错误”。实现代码如下:
private JButton getLoginButton() {
if (passwordField == null) { }
return passwordField;
passwordField = new JPasswordField();
passwordField.setBounds(new Rectangle(143, 69, 125, 22)); passwordField.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent e) {
if(e.getKeyChar()=='\\n') //如果按键字符是换行符“\\n”,执行 }
loginButton.doClick();
以下操作
});
if (loginButton == null) {
loginButton = new JButton();
loginButton.setBounds(new Rectangle(109, 114, 48, 20)); loginButton.setIcon(new ImageIcon(getClass().getResource(
24 聆风企业仓库管理系统
}
\)));
loginButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try { }
userStr = userField.getText(); String passStr = new
if (!Dao.checkLogin(userStr, passStr)) { }
e1.printStackTrace();
JOptionPane.showMessageDialog(LoginDialog.this,
\用户名与密码无法登录\, \登录失败\, JOptionPane.ERROR_MESSAGE);
String(passwordField.getPassword());
return;
} catch (Exception e1) {
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
mainFrame.getCzyStateLabel().setText(userStr);//设置状态栏setVisible(false); }
的操作员
});
return loginButton;}
5.3.3.2 系统主窗体设计
主窗体是人际交互的主题,用户通过主窗体中提供的各种菜单、表格、文本框、子窗体等组件进行管理。本系统主界面采用的是多用户界面,可以对打开的窗体进行平铺、关闭等操作,并在菜单中列出当前打开的子窗体的名称。如图7
内蒙古农业大学学士学位论文
25
图7 主窗体结构图
由于菜单和工具栏的设计可以直接通过工具实现,这里就不再介绍了,接下来介绍进货单模块的设计实现。进货单模块负责添加企业的进货信息,它根据进货人员提供的单据,将采购商品的名称、编号、产地、规格、单价和数量等信息记录到数据库中的库存表中。进货单的窗体界面如图8:
图 8 进货单窗口设计图
26 聆风企业仓库管理系统
在进货单窗体中单击“添加”按钮,会在表格中添加一个空行,可以在该空行的第一个字段选择商品名称,其他的字段信息会根据选择的商品自动填充。这样就需要为按钮编写ActionListener监听器,在该监听其中实现相应的操作。按钮的初始化由getTjButton()方法完成,该方法在初始化“添加”按钮时,为按钮添加了动作事件监听器。代码如下:
private JButton getTjButton() { }
于此同时,在窗体面板(bottomPanel)中布置了多个文本框,用于统计商品的数if (tjButton == null) { }
return tjButton;
tjButton = new JButton(); tjButton.setText(\添加\);
tjButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { }
// 初始化票号
java.sql.Date date = new
jhsjField.setText(date.toString()); String maxId = Dao.getRuKuMainMaxId(date); idField.setText(maxId); // 结束表格中没有编写的单元 stopTableCellEditing();
// 如果表格中不包含空行,就添加新行
for (int i = 0; i <= table.getRowCount()-1; i++) { }
DefaultTableModel model = (DefaultTableModel) table
.getModel();
model.addRow(new Vector());
if (table.getValueAt(i, 0) == null)
return;
java.sql.Date(jhsjDate.getTime());
});