原创不易,转载请注明出处。
在上一篇Java实验--基于Swing的简单的歌曲信息管理系统(四)中讲解了歌曲管理的页面布局,本篇讲解用户管理布局,大致和上一篇的差不多,不过这里是点击添加、修改按钮是弹出新的窗口进行操作。
布局设计如下:
这次我直接把窗体的布局设置成了边界布局,两个面板,左边的面板用来存放表格,右边的面板用来存放输入框和按钮。表格中的数据来自定义的实现了TableModel接口的内部类,具体代码如下:
/** * 这次使用自定义的TableModel来进行表格数据的填充, 表格的表头信息:id,用户名,密码 * */ private class userTableModel implements TableModel { private List<User> userList = null; // 数据 public userTableModel(List<User> users) { this.userList = users; } /** * JTable 列的数据类型 */ public Class<?> getColumnClass(int arg0) { return String.class; } /** * JTable的列数,3列 */ public int getColumnCount() { return 3; } /** * JTable的列名 */ public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "用户id"; } else if (columnIndex == 1) { return "用户名"; } else if (columnIndex == 2) { return "密码"; } else { return "出错"; } } /** * JTable显示的数据行数 */ public int getRowCount() { return userList.size(); } /** * 获取指定行,指定列的值 */ public Object getValueAt(int rowIndex, int columnIndex) { User user = userList.get(rowIndex); if (columnIndex == 0) { return user.getId(); } else if (columnIndex == 1) { return user.getName(); } else if (columnIndex == 2) { return user.getPassword(); } else { return "出错"; } } /** * 设置单元格是否可编辑 */ public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public void removeTableModelListener(TableModelListener l) { } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } public void addTableModelListener(TableModelListener arg0) { } }
添加了一个显示刷新表格列表的方法,如下:
/** * 刷新JTable,并显示数据 * * @param users */ public void refreshTable(List<User> users) { if (users == null || users.size() == 0) { JOptionPane.showInternalMessageDialog(AdminUserManageView.this, "Sorry, 暂无数据", "消息提示框", JOptionPane.INFORMATION_MESSAGE); return; } else { uModel = new userTableModel(users); // 这里一定要使用table中的setModel方法才可,不能使用table的构造方法,因为table已经在init中实例化了 table.setModel(uModel); System.out.println("refresh" + users); } }
布局完整代码如下:
public class AdminUserManageView extends JInternalFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel panelTabel; // 用来保存Jtable的一个面板 private JTable table; // 表格 private JPanel panelButton; // 按钮面板 private JTextField tfSearch; // 查询输入框 private JButton btnSearch; // 查询按钮 private JButton btnAdd; // 添加按钮 private JButton btnEdit; // 修改按钮 private JButton btnDelete; // 注销按钮 private JButton btnExit; // 退出按钮 private userTableModel uModel; // 自定义的tableModel private List<User> users; // 用来存储user private UserService userService; // UserService public AdminUserManageView() { userService = new UserServiceImpl(); init(); } private void init() { this.setTitle("用户信息管理"); this.setSize(600, 500); this.setIconifiable(true); // 窗体和最小化 this.setClosable(true); // 窗体可被关闭 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); // this.setLayout(getLayout()); // 获取顶层布局管理器的样式 this.setLayout(new BorderLayout()); panelTabel = new JPanel(new BorderLayout()); // 创建面板 // 给面板设置边框 panelTabel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(null, null), "查询信息")); users = userService.findAll(); table = new JTable(); // 创建表格 refreshTable(users); // 初始化表格,里面的数据都是从数据库中查询出的 // table 需要放在滚动面板中 panelTabel.add(new JScrollPane(table), BorderLayout.CENTER); this.add(panelTabel, BorderLayout.CENTER); panelButton = new JPanel(new GridLayout(8, 1, 10, 30)); panelButton.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "查询条件")); panelButton.add(new JLabel("请输入用户名")); tfSearch = new JTextField(8); panelButton.add(tfSearch); btnSearch = new JButton("查询"); panelButton.add(btnSearch); btnAdd = new JButton("添加"); panelButton.add(btnAdd); btnEdit = new JButton("修改"); btnEdit.setEnabled(false); panelButton.add(btnEdit); btnDelete = new JButton("删除"); btnDelete.setEnabled(false); panelButton.add(btnDelete); btnExit = new JButton("退出"); panelButton.add(btnExit); panelButton.add(new JLabel()); this.add(panelButton, BorderLayout.EAST); this.setVisible(true); } }