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);
}
}
```