package windows;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
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.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import data.UserDao;
import entity.User;
public class UserUpkeep extends PublicJFrame {
/** 成员变量 */
private JTextField tf_id;// 声明用户编号文本框
private JTextField tf_name;// 声明用户名文本框
private JPasswordField pf_pass;// 声明密码密码框
private JComboBox<String> jc_isAdmin;// 声明管理权限组合框
// 声明添加、修改、取消、关闭、删除、清空按钮
private JButton jb_insert, jb_update, jb_cancel, jb_close, jb_delete, jb_empty;
private JTable table;// 声明表格
// 创建用户表格模型
private DefaultTableModel model = new DefaultTableModel(new Object[][] {},
new String[] { "编号", "姓名", "密码", "管理员权限" });
// 创建用户列表,并保存所有用户对象
private List<User> list = UserDao.selectUserList();
/** 构造方法:用于初始化界面 */
UserUpkeep() {
// 第1步: 设置界面
this.setTitle("--用户信息维护--");
setBounds(220, 100, 800, 400);
this.setResizable(false);
// 第2步: 创建、设置一个“对话面板”,并将它设置为框架的内容面板。其上将放置一个外部分割面板
JPanel dialogPane = new JPanel();// 创建“对话面板”
dialogPane.setBorder(new EmptyBorder(5, 5, 5, 5));// 设置边缘空白大小
dialogPane.setBackground(new Color(198, 236, 253));// 设置界面背景
dialogPane.setLayout(new BorderLayout());// 设置界面布局为边界布局
setContentPane(dialogPane);// 将“对话面板”设置为框架的内容模板
// 第3步:创建、设置一个“外部分割面板”,水平左右放置组件。其上,左测将放置一个内部分割面板,右测将放置另一个表格面板
JSplitPane outerPane = new JSplitPane();// 创建“外部分割面板”
outerPane.setOpaque(false);// 设置“外部分割面板”透明
outerPane.setResizeWeight(0.1);// 设置“外部分割面板”宽度分配权限
outerPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);// 设置“外部分割面板”为水平分配
outerPane.setOneTouchExpandable(true);// 设置“外部分割面板”可以有一个触发扩展
dialogPane.add(outerPane, BorderLayout.CENTER);// 将“外部分割面板”添加到“对话面板”的中央
// 第4步:创建、设置一个内部分割面板,垂直上下放置组件。其上方将放置一个数据面板,下方将放置一个按钮面板
JSplitPane innerPane = new JSplitPane();// 创建“内部分割面板”
innerPane.setOpaque(false);// 设置“内部分割面板”透明
// 为“内部分割面板”设置边框说明
innerPane.setBorder(
new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null),
"用户信息维护", TitledBorder.LEADING, TitledBorder.TOP,
new Font("微软雅黑", Font.PLAIN, 14), new Color(59, 59, 59)));
innerPane.setResizeWeight(0.8); // 设置“内部分割面板”高度分配权限
innerPane.setOrientation(JSplitPane.VERTICAL_SPLIT);// 设置“内部分割面板”为垂直分配
outerPane.setLeftComponent(innerPane);// 将“内部分割面板”设置在“外部分割面板”的左侧
// 第5步:创建、设置“数据面板”
// 调用创建“数据面板”方法,创建“数据面板”,并将“数据面板”,设置在“内部分割面板"的上方
innerPane.setLeftComponent(createDataPanel());
// 第6步:创建、设置“按钮面板”
// 调用创建"按钮面板"方法,创建"按钮面板",并 将"按钮面板"设置在"内部分割面板"的下方
innerPane.setRightComponent(createButtonPanel());
// 第7步:创建、设置“表格面板”
// 调用创建"表格面板”方法,创建“表格面板”,并将“表格面板”,设置在“外部分割面板”的右侧
outerPane.setRightComponent(createTablePanel());
}
/** 成员方法1:用于创建“数据面板”的方法 */
private JPanel createDataPanel() {
//第1步:创建、设置“数据面板”
JPanel dataPanel = new JPanel(null);//创建“数据面板”
dataPanel.setBorder(new EmptyBorder(5, 5, 5, 10));//设置“数据面板”的边缘空白大小
dataPanel.setOpaque(false);//设置“数据面板”透明
//第2步:创建、设置“数据面板”上的各个组件,并添加到“数据面板”上
JLabel jl_id = new JLabel("编号:");//创建“用户编号”标签
jl_id.setBounds(50, 20, 100, 25);//设置“用户编号”标签的位置及大小
dataPanel.add(jl_id);//将“用户编号”标签添加到“数据面板”上
// 创建“用户编号”文本框,并根据user表的用户个数,显示初始数据
if (list.size() == 0) {
tf_id = new JTextField(String.valueOf(1));
} else {
tf_id = new JTextField(String.valueOf(list.size() + 1));
}
tf_id.addFocusListener(new FocusAdapter() {// 为“用户编号”文本框添加失去焦点监听器
public void focusLost(FocusEvent e) {
tf_id_focusLost();// 调用“用户编号”文本框加失去焦点事件响应方法
}
});
tf_id.setBounds(130, 20, 150, 25);
tf_id.setToolTipText("必须输入用户编号");// 设置“用户编号”文本框提示信息
dataPanel.add(tf_id);
JLabel jl_name = new JLabel("用户名:");//创建“用户名”标签
jl_name.setBounds(50, 60, 100, 25);
dataPanel.add(jl_name);
tf_name = new JTextField(10);//创建“用户名”文本框
tf_name.setBounds(130, 60, 150, 25);
tf_name.setToolTipText("必须输入用户名");
dataPanel.add(tf_name);
tf_name.addFocusListener(new FocusAdapter() {// 为“用户名”文本框添加失去焦点监听器
public void focusLost(FocusEvent e) {
tf_name_focusLost();// 调用“用户名”文本框加失去焦点事件响应方法
}
});
JLabel jl_pass1 = new JLabel("密码:");//创建“密码”标签
jl_pass1.setBounds(50, 100, 100, 25);
dataPanel.add(jl_pass1);
pf_pass = new JPasswordField(10);//创建“密码”密码框
pf_pass.setBounds(130, 100, 150, 25);
pf_pass.setToolTipText("必须输入用户密码");
dataPanel.add(pf_pass);
JLabel jl_isAdmin = new JLabel("管理权限:");//创建“用户权限”标签
jl_isAdmin.setBounds(50, 140, 100, 25);
dataPanel.add(jl_isAdmin);
String[] admin = new String[] { "管理员", "操作员", "一般用户" };
jc_isAdmin = new JComboBox<String>(admin);//创建“用户权限”组合框,并提供选择项
jc_isAdmin.setBounds(130, 140, 150, 25);
dataPanel.add(jc_isAdmin);
//第3步:返回“数据面板”
return dataPanel;
}
/** 成员方法2:用于创建“按钮面板”的方法 */
private JPanel createButtonPanel() {
//第1步:创建、设置“按钮面板”
JPanel buttonPanel = new JPanel(new GridBagLayout());//创建“按钮面板”,并采用网格包布局
buttonPanel.setOpaque(false);
((GridBagLayout) buttonPanel.getLayout()).columnWidths = new int[] { 0, 60, 60,
60, 60, 60, 0 };// 设置网格包布局各列宽度
((GridBagLayout) buttonPanel.getLayout()).columnWeights = new double[] { 0.5, 0.0,
0.0, 0.0, 0.0, 0.0, 0.5 };//设置网格包布局各列的宽度权限
//第2步:创建、设置“按钮面板”上的各个按钮组件,并添加单击事件监听器
jb_insert = new JButton("添加");//创建“添加”按钮
jb_insert.addActionListener(new ActionListener() {//为“添加”按钮添加单击事件监听器
public void actionPerformed(ActionEvent e) {
jb_insert_actionPerformed();//调用“添加”按钮事件响应方法,添加新用户
}
});
//将“添加”按钮添加到“按钮面板”
buttonPanel.add(jb_insert,
new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
GridBagConstraints.BOTH, new Insets(0, 0, 0, 5), 0, 0));
jb_update = new JButton("修改");//创建“修改”按钮
jb_update.addActionListener(new ActionListener() {//为“修改”按钮添加单击事件监听器
public void actionPerformed(ActionEvent e) {
jb_update_actionPerformed();// 调用“修改"按钮事件响应方法,修改用户信息
}
});
//将“修改”按钮添加到“按钮面板”
buttonPanel.