我的账户
啄木鸟学院

专注软件测试菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

java-贺威栋-2021.03.16

[复制链接]
I5029学员认证 发表于 2021-3-16 19:45:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
package equ.view;

/*
顶层容器,从JFrame继承
*/

import equ.model.Equ;
import equ.utils.SqliteDb;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;

public class MainView extends JFrame {
    JTextField searchText; // 搜索前面的输入框
    static JTable table; // 表格

    // 在构造方法中绘制页面
    public MainView() {
        // 设置窗口的标题
        setTitle("设备管理系统");

        // 把中间层容器加到顶层容器上
        add(northPanle(), BorderLayout.NORTH);
        add(centerPanle(), BorderLayout.CENTER);

        // 设置窗口的位置,xy是坐标点,相对于屏幕左上角的位置
        setBounds(400, 200, 1200, 600);
        // 将窗口设置为可见
        setVisible(true);
    }

    /*
    北边的部分,主要包含增删改查的按钮
     */
    private JPanel northPanle() {
        JPanel north = new JPanel();

        // 组件布局,5个按钮放到1行5列
        GridLayout grid = new GridLayout(1, 5);
        north.setLayout(grid);

        // 添加按钮
        JButton addButton = new JButton("添加");
        addButton.addActionListener(new AddAction()); // 添加按钮的监听事件
        north.add(addButton); // 按钮放到JPanel上

        // 修改按钮
        JButton modifyButton = new JButton("修改");
        modifyButton.addActionListener(new ModifyButton()); // 修改按钮的监听事件
        north.add(modifyButton); // 按钮放到JPanel上

        // 删除按钮
        JButton deleteButton = new JButton("删除");
        deleteButton.addActionListener(new DeleteButton()); // 删除按钮的监听事件
        north.add(deleteButton); // 按钮放到JPanel上

        // 搜索到输入框
        searchText = new JTextField();
        north.add(searchText);

        // 搜索按钮
        JButton searchButton = new JButton("搜索");
        searchButton.addActionListener(new SearchButton()); // 搜索按钮的监听事件
        north.add(searchButton); // 按钮放到JPanel上

        return north;
    }
    /*
    中间的部分,设备的表格
     */
    private JPanel centerPanle() {
        JPanel center = new JPanel();
        GridLayout grid = new GridLayout(1, 1);
        center.setLayout(grid);

        // 表格
        table = new JTable();
        // 设置单元格属性
        DefaultTableCellRenderer cr = new DefaultTableCellRenderer();
        // 设置对齐方式,居中对齐
        cr.setHorizontalAlignment(JLabel.CENTER);
        // 单元格属性与表格绑定到一起
        table.setDefaultRenderer(Object.class, cr);

        // 给表格中填充数据
        refreshTable(table, SqliteDb.queryAll());

        // JScrollPane是滚动面板,有横向纵向的滚动条
        JScrollPane jScrollPane = new JScrollPane(table);
        center.add(jScrollPane);

        return center;
    }

    /*
    刷新表格
    java.awt.List  java.unit.List中都有List类,名字冲突时带上包名
     */
    public static void refreshTable(JTable table, java.util.List<Equ> equs) {
        String[] biaotou = {"编号", "设备名字", "位置", "是否报废", "购买时间", "报废时间", "维修记录"};

        // 将列表转成二维数组
        String[][] equArrays = SqliteDb.list2Arrays(equs);
        // JTable 用 TableModel来保存数据
        TableModel tm = table.getModel();
        // TableModel 是接口,DefaultTableModel 是它的一个实现类
        // TableModel 类型的变量转成DefaultTableModel
        DefaultTableModel dtm = (DefaultTableModel) tm;

        // 填充数据
        dtm.setDataVector(equArrays, biaotou);

    }

    // 添加按钮的功能
    private class AddAction implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // System.out.println("你点击了添加设备按钮");
            // 打开添加设备的页面
            new AddView();
        }
    }

    // 修改按钮的功能
    private class ModifyButton implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // System.out.println("你点击了修改设备按钮");
            // 获取当前选中行
            int row = table.getSelectedRow();
            // 获取该行设备信息
            String id = (String) table.getValueAt(row, 0);
            String name = (String) table.getValueAt(row, 1);
            String location = (String) table.getValueAt(row, 2);
            String baoFei = (String) table.getValueAt(row, 3);
            String buyTime = (String) table.getValueAt(row, 4);
            String baoFeiTime = (String) table.getValueAt(row, 5);
            String record = (String) table.getValueAt(row, 6);
            // 构造设备对象
            Equ equ = new Equ(id, name, location, baoFei, buyTime, baoFeiTime, record);
            // 打开修改页面
            new ModifyView(equ);

        }
    }

    // 删除按钮的功能
    private class DeleteButton implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // System.out.println("你点击了删除设备按钮");
            // 获取选中行
            int[] rows = table.getSelectedRows();
            System.out.println(Arrays.toString(rows));
            String[] ids = new String[rows.length];
            // 获取这些设备id
            for (int i = 0; i < rows.length; i++) {
                ids = (String) table.getValueAt(rows, 0);
            }
            System.out.println("选中行的编号为:" + Arrays.toString(ids));
            // 弹出确认框,点击确认删除,点击取消不删除
            int msg = JOptionPane.showConfirmDialog(null, "请确认是否删除编号为" + Arrays.toString(ids) + "的设备",
                    "删除确认", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            System.out.println(msg);
            if (msg == 0) { // 表示选择了yes
                // 根据id删除设备
                for (String id : ids) {
                    SqliteDb.deleteEqu(id);
                }
                // 刷新表格
                refreshTable(table, SqliteDb.queryAll());
                // 弹出提示
                JOptionPane.showMessageDialog(null, "删除完成");


            }
        }
    }

    // 搜索按钮的功能
    private class SearchButton implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // System.out.println("你点击了搜索设备按钮");
            java.util.List<Equ> equs = new ArrayList<>();
            String temp = searchText.getText(); // 获取输入的内容
            // 如果输入的内容为空,全量搜索
            if (temp == null || temp.equals("")) {
                equs = SqliteDb.queryAll();
            } else {
                // 否则,根据名字搜索
                equs = SqliteDb.queryByName(temp);
            }

            // 搜索的结果刷新到表格中
            refreshTable(table, equs);

            // 清空搜索框
            searchText.setText("");
        }
    }

}

回复

使用道具 举报

关注0

粉丝0

帖子27

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注软件测试菁英教育

客服电话:17792550360

客服时间:9:00-21:00

卓目鸟学苑 - 专注软件测试菁英教育!( 陕ICP备2025058934号-2 )

版权所有 © 西安菁英教育科技有限公司 2023-2026