JTable操作文本文件

本文介绍使用Java Swing实现文本文件的基本操作,包括增、删、读、存等功能。通过JTable、JFileChooser等组件创建图形化界面,利用FileReader、FileWriter进行文件读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

运用Java Swing中的JTable、JFileChooser和Java中的FileReader、FileWriter实现了操作文本文件的图形化界面,目前做的功能有:增、删、读、存,比较基础。

基本思路:

  • 用java的可视化工具WindowBuilder画好界面;
  • 分别写好各功能对应的方法;
  • 通过鼠标事件调用对应的方法以实现功能。

下面直接贴出小编所操作的文本文件和源码:

文本文件测试内容:

编号	姓名	性别
1	张三	男	
2	李四	女	
3	小明	男	
4	小红	女	
5	马云	男	

对应源码(做了比较详细的注释):

// FileName: MenuAndData.java

package dataTest;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTable;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;

import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MenuAndData {

	private JFrame frmJtablefiletest;
	private JTextField textField;
	private JTextField textField_1;
	private JTextField textField_2;
	private final JScrollPane scrollPane = new JScrollPane();
	private JTable table;
	private BufferedReader bufferedReader;
	private LineNumberReader lineNum;
	private String[] head;
	private DefaultTableModel tableModel;
	private int row;
	private String fName;
	private String fPath;
	private BufferedWriter bw;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MenuAndData window = new MenuAndData();
					window.frmJtablefiletest.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public MenuAndData() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmJtablefiletest = new JFrame();
		frmJtablefiletest.setTitle("JTableFileTest");
		frmJtablefiletest.setBounds(500, 250, 544, 539);
		frmJtablefiletest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmJtablefiletest.getContentPane().setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 526, 26);
		frmJtablefiletest.getContentPane().add(panel);
		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.setToolTipText("");
		panel.add(menuBar);
		
		JMenu mnNewMenu = new JMenu("\u6587\u4EF6");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmNewMenuItem = new JMenuItem("\u6253\u5F00");
		mntmNewMenuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				try {
					openFile();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		mnNewMenu.add(mntmNewMenuItem);
		
		String[] head = {"属性1", "属性2", "属性3"};
		String[][] data = {
				{"11", "12", "13"},
				{"21", "22", "23"},
		};
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(0, 25, 526, 469);
		frmJtablefiletest.getContentPane().add(panel_1);
		panel_1.setLayout(null);
		
		JPanel panel_2 = new JPanel();
		panel_2.setBounds(0, 0, 526, 345);
		panel_1.add(panel_2);
		panel_2.setLayout(null);
		scrollPane.setBounds(0, 0, 526, 345);
		panel_2.add(scrollPane);
		
		tableModel = new DefaultTableModel(data,head);
		table = new JTable(tableModel);
		scrollPane.setViewportView(table);
		
		JButton btnNewButton = new JButton("\u589E\u52A0");
		btnNewButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent arg0) {
				addData();
			}
		});
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnNewButton.setBounds(14, 382, 113, 27);
		panel_1.add(btnNewButton);
		
		JLabel label = new JLabel("\u7F16\u53F7");
		label.setBounds(147, 386, 39, 18);
		panel_1.add(label);
		
		textField = new JTextField();
		textField.setBounds(180, 383, 72, 24);
		panel_1.add(textField);
		textField.setColumns(10);
		
		JLabel label_1 = new JLabel("\u59D3\u540D");
		label_1.setBounds(266, 386, 39, 18);
		panel_1.add(label_1);
		
		textField_1 = new JTextField();
		textField_1.setBounds(299, 383, 72, 24);
		panel_1.add(textField_1);
		textField_1.setColumns(10);
		
		JLabel label_2 = new JLabel("\u6027\u522B");
		label_2.setBounds(390, 386, 39, 18);
		panel_1.add(label_2);
		
		textField_2 = new JTextField();
		textField_2.setBounds(426, 383, 72, 24);
		panel_1.add(textField_2);
		textField_2.setColumns(10);
		
		JButton button = new JButton("\u5220\u9664");
		button.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				deleteData();
			}
		});
		button.setBounds(14, 429, 113, 27);
		panel_1.add(button);
		
		JButton button_1 = new JButton("\u4FDD\u5B58\u5230\u6587\u4EF6");
		button_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				saveFile();
			}
		});
		button_1.setBounds(147, 429, 143, 27);
		panel_1.add(button_1);

	}

	// 打开文件并显示
	public void openFile() throws IOException {
		JFileChooser fc = new JFileChooser();
		int sd = fc.showOpenDialog(frmJtablefiletest);
		if (sd == JFileChooser.APPROVE_OPTION) {
			fName = fc.getSelectedFile().getName();
			fPath = fc.getCurrentDirectory().toString();
			try {
				FileReader fileReader = new FileReader(fPath + "/" + fName);
				// 获取行数
				lineNum = new LineNumberReader(fileReader);
				lineNum.skip(Long.MAX_VALUE);
				int lines = lineNum.getLineNumber();
				fileReader.close();
				
				fileReader = new FileReader(fPath + "/" + fName);
				bufferedReader = new BufferedReader(fileReader);
				String line = bufferedReader.readLine();
				
				String[][] data = new String[lines-1][3];
				int flag = 1;
				int j = 0;
				while(line!=null) {
					if (flag==1) {
						head = line.split("\\\t");
						flag = 0;
					} else {
						String[] text = line.split("\\\t");
						for (int i=0;i<text.length;i++) {
							data[j][i] = text[i];
						}
						j = j + 1;
					}
					line = bufferedReader.readLine();
				}
				tableModel = new DefaultTableModel(data,head);
				table = new JTable(tableModel);
				scrollPane.setViewportView(table);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		}	
	}
	
	// 增加一行
	public void addData() {
		String[] rowValues = {textField.getText(), textField_1.getText(), textField_2.getText()};
        tableModel.addRow(rowValues);
        textField.setText("");
        textField_1.setText("");
        textField_2.setText("");
	}
	
	// 删除指定行
	public void deleteData() {
		row = table.getSelectedRow();
		tableModel.removeRow(row);
	}
	
	// 保存到文件
	public void saveFile() {
		try {
			FileWriter fw = new FileWriter(fPath + "/" + fName);
			bw = new BufferedWriter(fw);
			bw.write(head[0] + "\t" + head[1] + "\t" + head[2] + "\r\n");
			int rowNumber = tableModel.getRowCount();
			for (int i=0;i<rowNumber;i++) {
				for (int j=0;j<3;j++) {
					bw.write(tableModel.getValueAt(i, j) + "\t");
				}
				bw.write("\r\n");
			}
			bw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

小结:

初接触Java Swing,做的比较基础,一些基本的功能还是有的,比如文件对话框、读取文件、存储文件、增删表格数据等。谨以此作个笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值