m0_73994694 2024-11-01 18:28
浏览 3

关于#java#的问题:java:JDialog弹窗自动弹出

java:第一次点击删除正常运行,正常弹窗,但是第二次点击删除执行代码正常弹窗后,会跟着自动弹出1次”未选中要修改的行,请重试“的弹窗,第三次点击删除执行代码后会跟着弹出2次,第四次则弹3次

下面代码我已经把不需要的代码删除了,方便查看代码


```java
public class NoteJFrame extends JFrame implements ActionListener {
    
    //创建三个按钮
    JButton add = new JButton("添加");
    JButton update = new JButton("修改");
    JButton delete = new JButton("删除");
    //创建表格组件
    JTable table;
    //创建菜单的导入和导出
    JMenuItem exportItem = new JMenuItem("导出");
    JMenuItem importItem = new JMenuItem("导入");
    //定义表格的内容
    //二维数组中的每一个一维数组,是表格里面的一行数据
    Object[][] tabledatas = new Object[30][3];

    public NoteJFrame() {
        //初始化界面
        initFrame();
        //读取的本地文件里面的数据
        getDatas();
        //初始化菜单
        initJmenuBar();
        //初始化组件
        initView();
        //让界面显示出来
        this.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获取当前那个组件被点击
        Object obj = e.getSource();
       if (obj == delete) {
            System.out.println("删除按钮被点击");
           
            int i = table.getSelectedRow();
            if (i < 0 || tabledatas[i][0] == null) {
                showJDialog("未选中要修改的行,请重试");
                return;
            }
            int j = showChooseJDialog();
            // 点击了确定
            if (j == 0) {
                //删除操作代码
                tabledatas[i][0] = null;
                tabledatas[i][1] = null;
                tabledatas[i][2] = null;
                // 判断删除的是否是最后一个一维数组
                if (i!= tabledatas.length) {
                    // 将被删除的一维数组后面的一维数组向前移动一位
                    for (int z = 0; z < tabledatas.length - 1; z++) {
                        if (z >= i) {
                            tabledatas[z] = tabledatas[z + 1];
                        }
                    }
                    // 将移动后的数组的序号减一
                    for (int index = 0; index < tabledatas.length; index++) {
                        if (tabledatas[index][0]!= null) {
                            tabledatas[index][0] = index + 1;
                        }
                    }
                }
                try {
                    // 将修改后的数据写入到本地文件
                    BufferedWriter bw = new BufferedWriter(new FileWriter("diary\\save\\save.txt"));
                    for (Object[] tabledata : tabledatas) {
                        if (tabledata[0]!= null) {
                            bw.write("index=" + tabledata[0] + "&title=" + tabledata[1] + "&content=" + tabledata[2]);
                            bw.newLine();
                        }
                    }
                    bw.close();
                } catch (IOException ex) {
                    throw new RuntimeException(ex);
                }
                // 更新表格显示
                initView();
                showJDialog("删除成功");
            } else {
                // 点击了取消
                showJDialog("删除失败");
            }
        }
    }

    //初始化组件
    private void initView() {
        //删除所有组件
        this.getContentPane().removeAll();
        
        //定义最上面的每日一记
        JLabel title = new JLabel("每日一记");
        title.setBounds(220, 20, 584, 50);
        title.setFont(new Font("宋体", Font.BOLD, 32));
        this.getContentPane().add(title);

        //定义表格的标题
        Object[] tableTitles = {"编号", "标题", "正文"};

        //定义表格组件
        //并给表格设置标题和内容
        table = new JTable(tabledatas, tableTitles);
        table.setBounds(40, 70, 504, 380);

        //创建可滚动的组件,并把表格组件放在滚动组件中间
        //好处:如果表格中数据过多,可以进行上下滚动
        JScrollPane jScrollPane = new JScrollPane(table);
        jScrollPane.setBounds(40, 70, 504, 380);
        this.getContentPane().add(jScrollPane);

        //给三个按钮设置宽高属性,并添加点击事件
        add.setBounds(40, 466, 140, 40);
        update.setBounds(222, 466, 140, 40);
        delete.setBounds(404, 466, 140, 40);

        add.setFont(new Font("宋体", Font.PLAIN, 24));
        update.setFont(new Font("宋体", Font.PLAIN, 24));
        delete.setFont(new Font("宋体", Font.PLAIN, 24));

        this.getContentPane().add(add);
        this.getContentPane().add(update);
        this.getContentPane().add(delete);
        
        add.addActionListener(this);
        update.addActionListener(this);
        delete.addActionListener(this);
        
        //刷新
        this.getContentPane().repaint();
    }

    //只创建一个弹框对象
    JDialog jDialog = new JDialog();
    public void showJDialog(String content) {
        if (!jDialog.isVisible()) {
            //创建一个弹框对象
            JDialog jDialog = new JDialog();
            //给弹框设置大小
            jDialog.setSize(200, 150);
            //让弹框置顶
            jDialog.setAlwaysOnTop(true);
            //让弹框居中
            jDialog.setLocationRelativeTo(null);
            //弹框不关闭永远无法操作下面的界面
            jDialog.setModal(true);
            //创建Jlabel对象管理文字并添加到弹框当中
            JLabel warning = new JLabel(content);
            warning.setBounds(0, 0, 200, 150);
            jDialog.getContentPane().add(warning);

            //让弹框展示出来
            jDialog.setVisible(true);
        }
    }

  
    public int showChooseJDialog() {
        return JOptionPane.showConfirmDialog(this, "是否删除选中数据?", "删除信息确认", JOptionPane.YES_NO_OPTION);
    }
}

```

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 创建了问题 11月1日

    悬赏问题

    • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
    • ¥15 java 的protected权限 ,问题在注释里
    • ¥15 这个是哪里有问题啊?
    • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
    • ¥15 texstudio的问题,
    • ¥15 spaceclaim模型变灰色
    • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
    • ¥15 字符串比较代码的漏洞
    • ¥15 欧拉系统opt目录空间使用100%
    • ¥15 ul做导航栏格式不对怎么改?