java项目:文件保险柜#4界面重写(2)

要保证隐私性的话,就只能让用户看到自己的文件夹,就不能只是用文件选择器,可以用文件选择器加上遍历文件,把对应的文件夹的文件取出来,放在窗体上面。

对文件的操作,我们还需要进行上传和下载,那么就涉及到文件的多选操作。对每一个取出来的文件加上复选框,再在窗体上加上上传下载按钮

先重写一下文件列表的窗体

让文件选择放在主窗体中,不是上一版的浮动的文件选择器,

JPanel jp = new JPanel();
        jp.setBackground(Color.DARK_GRAY);
        File[] files = filePath.listFiles();
        DefaultListModel<JCheckBox> listModel = new DefaultListModel<>();
        for (int i = 0; i < files.length; i++) {
            File f = files[i];
            JCheckBox btn = new JCheckBox(f.getName());
            listModel.add(i, btn);
        }
        JList<JCheckBox> fileList = new JList<>(listModel);
        // 添加鼠标监听器以处理选中
        fileList.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int index = fileList.locationToIndex(e.getPoint());
                if (index != -1) {
                    JCheckBox checkBox = listModel.getElementAt(index);
                    checkBox.setSelected(!checkBox.isSelected());
                    fileList.repaint(fileList.getCellBounds(index, index));
                }
            }
        });

 这段代码把传进来的文件名遍历了一遍,仅遍历一级,放在JList中

在listModel中,存放了文件对应的复选框,也就是说,目的是创建一个带有复选框的文件列表,用户可以通过点击复选框来选择或取消选择文件

接下来写一个单元格渲染器,来对复选的文件进行操作

// 创建单元格渲染器,以便在JList中显示JCheckBox
        fileList.setCellRenderer(new JCheckBoxRenderer());
        System.out.println("单元格渲染器被调用");
    //设置了 JList 的单元格渲染器为 JCheckBoxRenderer,这样列表中的每个项都会显示一个复选框
    JScrollPane jsp = new JScrollPane(fileList);
        jsp.setPreferredSize(new Dimension(550, 400));
    JButton upbtn = new JButton("上传");
    JButton downbtn = new JButton("下载");
        jp.add(jsp);
        jp.add(upbtn);
        jp.add(downbtn);
        downbtn.addActionListener(e -> {
        String pwd = JOptionPane.showInputDialog("请输入解密密码:");
        if (pwd.equals("test")) {//当前解密密码唯一,为“text”
            for (int i = 0; i < listModel.getSize(); i++) {
                JCheckBox jCheckBox = listModel.get(i);
                if (jCheckBox.isSelected()) {
                    System.out.println(jCheckBox.getText());//点击下载后仅有打印文件操作,待续
                }
            }
            JOptionPane.showMessageDialog(jp, "下载成功!");
        } else {
            JOptionPane.showMessageDialog(jp, "密码错误!");
        }
    });

这段代码主要是让复选框能接上后续操作,并连接上下载按钮

最后还有个内部类

public Component getListCellRendererComponent
        (JList<? extends JCheckBox> list, JCheckBox value, int index, boolean isSelected, boolean cellHasFocus) {
    setEnabled(list.isEnabled());
    setSelected(value.isSelected());
    setFont(list.getFont());
    setBackground(list.getBackground());
    setForeground(list.getForeground());
    setText(value.getText());
    return this;
}

方法体:

  • setEnabled(list.isEnabled()):设置复选框的启用状态,使其与列表的启用状态一致。
  • setSelected(value.isSelected()):设置复选框的选中状态,使其与传入的 JCheckBox 的选中状态一致。
  • setFont(list.getFont()):设置复选框的字体,使其与列表的字体一致。
  • setBackground(list.getBackground()):设置复选框的背景颜色,使其与列表的背景颜色一致。
  • setForeground(list.getForeground()):设置复选框的前景颜色,使其与列表的前景颜色一致。
  • setText(value.getText()):设置复选框的文本,即文件名。

目前还没写好二级密码传入,仅用一个硬密码“text”

上传下载按钮的后续操作暂未写

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值