酒店管理系统之登录界面(swing)



package com.mwq.frame;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.net.URL;
import java.util.Vector;

import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

import com.mwq.dao.Dao;
import com.mwq.mwing.MPanel;

public class LandFrame extends JFrame {

private JPasswordField passwordField;// 密码框

private JComboBox usernameComboBox;// 用户名下拉菜单

public static void main(String args[]) {
try {
LandFrame frame = new LandFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}

public LandFrame() {
// 首先设置窗口的相关信息
super();// 调用父类的构造方法
setTitle(" T 科技");// 设置窗口的标题
setResizable(false);// 设置窗口不可以改变大小
setAlwaysOnTop(true);// 设置窗口总在最前方
setBounds(100, 100, 428, 292);// 设置窗口的大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置当关闭窗口时执行的动作

// 下面将创建一个面板对象并添加到窗口的容器中
final MPanel panel = new MPanel(this.getClass().getResource(
"/img/land_background.jpg"));// 创建一个面板对象
panel.setLayout(new GridBagLayout());// 设置面板的布局管理器为网格组布局
getContentPane().add(panel, BorderLayout.CENTER);// 将面板添加到窗体中

final JLabel topLabel = new JLabel();
topLabel.setPreferredSize(new Dimension(0, 126));
final GridBagConstraints gridBagConstraints_5 = new GridBagConstraints();
gridBagConstraints_5.gridx = 0;
gridBagConstraints_5.gridy = 0;
panel.add(topLabel, gridBagConstraints_5);

final JLabel leftLabel = new JLabel();
leftLabel.setPreferredSize(new Dimension(140, 0));
final GridBagConstraints gridBagConstraints_3 = new GridBagConstraints();
gridBagConstraints_3.gridy = 1;
gridBagConstraints_3.gridx = 0;
panel.add(leftLabel, gridBagConstraints_3);

final JLabel rightLabel = new JLabel();
rightLabel.setPreferredSize(new Dimension(55, 0));
final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints();
gridBagConstraints_2.gridy = 1;
gridBagConstraints_2.gridx = 1;
panel.add(rightLabel, gridBagConstraints_2);

// 创建并设置用户名下拉菜单
usernameComboBox = new JComboBox();// 创建用户名下拉菜单组件对象
usernameComboBox.setMaximumRowCount(5);// 设置下拉菜单最多可显示的选项数
usernameComboBox.addItem("请选择");// 为下拉菜单添加提示项
usernameComboBox
.addActionListener(new UsernameComboBoxActionListener());// 为下拉菜单添加事件监听器
final GridBagConstraints gridBagConstraints = new GridBagConstraints();// 创建网格组布局管理器对象
gridBagConstraints.anchor = GridBagConstraints.WEST;// 设置为靠左侧显示
gridBagConstraints.gridy = 1;// 设置行索引为1
gridBagConstraints.gridx = 2;// 设置列索引为2
panel.add(usernameComboBox, gridBagConstraints);// 将组件按指定的布局管理器添加到面板中

// 创建并设置密码框
passwordField = new JPasswordField();// 创建密码框组件对象
passwordField.setColumns(20);// 设置密码框可显示的字符数
passwordField.setText(" ");// 设置密码框默认显示6个空格
passwordField.addFocusListener(new PasswordFieldFocusListener());// 为密码框添加焦点监听器
final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();// 创建网格组布局管理器对象
gridBagConstraints_1.insets = new Insets(5, 0, 0, 0);// 设置组件外部上方的填充量为5像素
gridBagConstraints_1.anchor = GridBagConstraints.WEST;// 设置为靠左侧显示
gridBagConstraints_1.gridy = 2;// 设置行索引为2
gridBagConstraints_1.gridx = 2;// 设置列索引为2
panel.add(passwordField, gridBagConstraints_1);// 将组件按指定的布局管理器添加到面板中

// 创建并设置一个用来添加三个按钮的面板
final JPanel buttonPanel = new JPanel();// 创建一个用来添加按钮的面板
buttonPanel.setOpaque(false);// 设置面板的背景为透明
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));// 设置面板采用水平箱布局
final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints();// 创建网格组布局管理器对象
gridBagConstraints_4.insets = new Insets(10, 0, 0, 0);// 设置组件外部上方的填充量为10像素
gridBagConstraints_4.gridwidth = 2;// 设置其占两列
gridBagConstraints_4.gridy = 3;// 设置行索引为3
gridBagConstraints_4.gridx = 1;// 设置列索引为1
panel.add(buttonPanel, gridBagConstraints_4);// 将组件按指定的布局管理器添加到面板中

// 创建并设置一个登录按钮,并将其添加到用来添加按钮的面板中
final JButton landButton = new JButton();// 创建登录按钮组件对象
landButton.setMargin(new Insets(0, 0, 0, 0));// 设置按钮边框和标签之间的间隔
landButton.setContentAreaFilled(false);// 设置不绘制按钮的内容区域
landButton.setBorderPainted(false);// 设置不绘制按钮的边框
URL landUrl = this.getClass().getResource("/img/land_submit.png");// 获得默认情况下登录按钮显示图片的URL
landButton.setIcon(new ImageIcon(landUrl));// 设置默认情况下登录按钮显示的图片
URL landOverUrl = this.getClass().getResource(
"/img/land_submit_over.png");// 获得当鼠标经过登录按钮时显示图片的URL
landButton.setRolloverIcon(new ImageIcon(landOverUrl));// 设置当鼠标经过登录按钮时显示的图片
URL landPressedUrl = this.getClass().getResource(
"/img/land_submit_pressed.png");// 获得当登录按钮被按下时显示图片的URL
landButton.setPressedIcon(new ImageIcon(landPressedUrl));// 设置当登录按钮被按下时显示的图片
landButton.addActionListener(new LandButtonActionListener());// 为登录按钮添加事件监听器
buttonPanel.add(landButton);// 将登录按钮添加到用来添加按钮的面板中

final JButton resetButton = new JButton();
resetButton.setMargin(new Insets(0, 0, 0, 0));
resetButton.setContentAreaFilled(false);
resetButton.setBorderPainted(false);
URL resetUrl = this.getClass().getResource("/img/land_reset.png");
resetButton.setIcon(new ImageIcon(resetUrl));
URL resetOverUrl = this.getClass().getResource(
"/img/land_reset_over.png");
resetButton.setRolloverIcon(new ImageIcon(resetOverUrl));
URL resetPressedUrl = this.getClass().getResource(
"/img/land_reset_pressed.png");
resetButton.setPressedIcon(new ImageIcon(resetPressedUrl));
resetButton.addActionListener(new ResetButtonActionListener());
buttonPanel.add(resetButton);

final JButton exitButton = new JButton();
exitButton.setMargin(new Insets(0, 0, 0, 0));
exitButton.setContentAreaFilled(false);
exitButton.setBorderPainted(false);
URL exitUrl = this.getClass().getResource("/img/land_exit.png");
exitButton.setIcon(new ImageIcon(exitUrl));
URL exitOverUrl = this.getClass()
.getResource("/img/land_exit_over.png");
exitButton.setRolloverIcon(new ImageIcon(exitOverUrl));
URL exitPressedUrl = this.getClass().getResource(
"/img/land_exit_pressed.png");
exitButton.setPressedIcon(new ImageIcon(exitPressedUrl));
exitButton.addActionListener(new ExitButtonActionListener());
buttonPanel.add(exitButton);
//

// 初始化用户名下拉菜单
Vector userNameV = Dao.getInstance().sUserNameOfNotFreeze();
if (userNameV.size() == 0) {
usernameComboBox.addItem("TSoft");
} else {
for (int i = 0; i < userNameV.size(); i++) {
usernameComboBox.addItem(userNameV.get(i));
}
}

}

class UsernameComboBoxActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String userName = (String) usernameComboBox.getSelectedItem();
if (userName.equals("TSoft"))
passwordField.setText("111");
}
}

class PasswordFieldFocusListener implements FocusListener {
public void focusGained(FocusEvent e) {
passwordField.setText("");
}

public void focusLost(FocusEvent e) {
char[] passwords = passwordField.getPassword();
String password = turnCharsToString(passwords);
if (password.length() == 0) {
passwordField.setText(" ");
}
}
}

class ExitButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
}

class ResetButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
usernameComboBox.setSelectedIndex(0);
passwordField.setText(" ");
}
}

class LandButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String username = usernameComboBox.getSelectedItem().toString();// 获得登录用户的名称
if (username.equals("请选择")) {// 查看是否选择了登录用户
JOptionPane.showMessageDialog(null, "请选择登录用户!", "友情提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
resetUsernameAndPassword();// 恢复登录用户和登录密码
}
char[] passwords = passwordField.getPassword();// 获得登录用户的密码
String inputPassword = turnCharsToString(passwords);// 将密码从char型数组转换成字符串
if (username.equals("TSoft")) {// 查看是否为默认用户登录
if (inputPassword.equals("111")) {// 查看密码是否为默认密码
land(null);// 登录成功
String infos[] = { "请立刻单击“用户管理”按钮添加用户!",
"添加用户后需要重新登录,本系统才能正常使用!" };// 组织提示信息
JOptionPane.showMessageDialog(null, infos, "友情提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
} else {// 密码错误
JOptionPane.showMessageDialog(null,
"默认用户“TSoft”的登录密码为“111”!", "友情提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
passwordField.setText("111");// 将密码设置为默认密码
}
} else {
if (inputPassword.length() == 0) {// 用户未输入登录密码
JOptionPane.showMessageDialog(null, "请输入登录密码!", "友情提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
resetUsernameAndPassword();// 恢复登录用户和登录密码
}
Vector user = Dao.getInstance().sUserByName(username);// 查询登录用户
String password = user.get(5).toString();// 获得登录用户的密码
if (inputPassword.equals(password)) {// 查看登录密码是否正确
land(user);// 登录成功
} else {// 登录密码错误
JOptionPane.showMessageDialog(null, "登录密码错误,请确认后重新登录!",
"友情提示", JOptionPane.INFORMATION_MESSAGE);// 弹出提示
resetUsernameAndPassword();// 恢复登录用户和登录密码
}
}
}

private void resetUsernameAndPassword() {// 恢复登录用户和登录密码
usernameComboBox.setSelectedIndex(0);// 恢复选中的登录用户为“请选择”项
passwordField.setText(" ");// 恢复密码框的默认值为6个空格
return;// 直接返回
}

private void land(Vector user) {// 登录成功
TipWizardFrame tipWizard = new TipWizardFrame(user);// 创建主窗体对象
tipWizard.setVisible(true);// 设置主窗体可见
setVisible(false);// 设置登录窗口不可见
}

}

private String turnCharsToString(char[] chars) {
StringBuffer strBuf = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
strBuf.append(chars[i]);
}
return strBuf.toString().trim();
}
}



上面代码得出如下图:

[img]http://dl.iteye.com/upload/attachment/472719/b17a5a94-8fb2-334f-9471-30b802c03a6d.jpg[/img]

在53行:
final MPanel panel = new MPanel(this.getClass().getResource(
用到下面代码:

package com.mwq.mwing;

import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class MPanel extends JPanel {

private ImageIcon imageIcon;// 声明一个图片对象

public MPanel(URL imgUrl) {
super();// 继承父类的构造方法
setLayout(new GridBagLayout());// 将布局管理器修改为网格组布局
imageIcon = new ImageIcon(imgUrl);// 根据传入的URL创建ImageIcon对象
setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());// 设置面板与图片等大
}

protected void paintComponent(Graphics g) {// 重写JPanel类的paintComponent()方法
super.paintComponent(g);// 调用JPanel类的paintComponent()方法
Image image = imageIcon.getImage();// 通过ImageIcon对象获得Image对象
g.drawImage(image, 0, 0, null);// 绘制Image对象,即将图片绘制到面板中
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值