java 语言中实现勾选jtable表格中一行,点击删除按钮删除这一行同时删除其再文件中对应信息代码
时间: 2024-03-21 19:38:02 浏览: 13
以下是Java语言实现勾选JTable表格中一行,点击删除按钮删除这一行同时删除其在文件中对应信息的示例代码:
```java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class DeleteSelectedRow extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
private DefaultTableModel model;
private JButton deleteButton;
private JCheckBox checkBox;
public DeleteSelectedRow() {
setTitle("Delete Selected Rows");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
// 创建表格
String[] columnNames = { "Name", "Age", "Gender" };
Object[][] data = { { "Tom", 20, "Male" }, { "Mary", 25, "Female" }, { "John", 30, "Male" } };
model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
// 添加复选框列
checkBox = new JCheckBox();
table.getColumnModel().getColumn(0).setCellEditor(new CheckBoxEditor(checkBox));
table.getColumnModel().getColumn(0).setCellRenderer(new CheckBoxRenderer());
// 添加滚动条
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 添加删除按钮
deleteButton = new JButton("Delete");
deleteButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int[] selectedRows = table.getSelectedRows();
for (int i = selectedRows.length - 1; i >= 0; i--) {
int row = selectedRows[i];
// 删除JTable表格中的行
model.removeRow(row);
// 删除文件中对应信息
try {
File file = new File("data.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
StringBuffer buffer = new StringBuffer();
while ((line = reader.readLine()) != null) {
if (table.getValueAt(row, 0).equals(line.split(",")[0])) {
continue; // 跳过要删除的行
}
buffer.append(line).append(System.lineSeparator());
}
reader.close();
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(buffer.toString());
writer.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
JPanel panel = new JPanel();
panel.add(deleteButton);
getContentPane().add(panel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
DeleteSelectedRow frame = new DeleteSelectedRow();
frame.setVisible(true);
}
}
// 复选框渲染器
class CheckBoxRenderer extends JCheckBox implements javax.swing.table.TableCellRenderer {
private static final long serialVersionUID = 1L;
public CheckBoxRenderer() {
setHorizontalAlignment(JCheckBox.CENTER);
}
public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
if (value == null)
return null;
setSelected((Boolean) value);
return this;
}
}
// 复选框编辑器
class CheckBoxEditor extends JCheckBox implements javax.swing.table.TableCellEditor {
private static final long serialVersionUID = 1L;
public CheckBoxEditor(JCheckBox checkBox) {
super();
setOpaque(true);
setHorizontalAlignment(JCheckBox.CENTER);
}
public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
int column) {
if (value == null)
return null;
setSelected((Boolean) value);
return this;
}
public Object getCellEditorValue() {
return new Boolean(isSelected());
}
}
```
这个示例程序中,删除按钮的ActionListener中实现了删除JTable表格中勾选的行和文件中对应信息的代码。在删除文件信息时,使用了BufferedReader对象逐行读取文件,并使用StringBuffer对象保存未删除的行,然后使用BufferedWriter对象写入新的文件。这里假设文件中的信息是按行存储的,每行用逗号分隔。如果信息是按列存储的,可以根据具体情况进行修改。