原创不易,转载请注明出处。

  在上一篇Java实验--基于Swing的简单的歌曲信息管理系统(四)中讲解了歌曲管理的页面布局,本篇讲解用户管理布局,大致和上一篇的差不多,不过这里是点击添加、修改按钮是弹出新的窗口进行操作。

  布局设计如下:

  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);
    }
}
View Code

相关文章:

  • 2021-12-27
  • 2021-11-27
  • 2021-07-12
  • 2021-07-16
  • 2022-01-09
  • 2021-12-19
  • 2021-04-29
  • 2021-11-08
猜你喜欢
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2022-12-23
  • 2021-08-26
相关资源
相似解决方案