我正在做一个ui,我将文本文件中的数据读取到JTable中,用户可以在JTable中进行编辑,然后将数据保存到另一个文本文件中。我想要一个刷新按钮,以便如果用户在JTable中进行编辑并且不希望更改到完成后,可以单击刷新按钮,数据将是从文本文件读取的先前数据。
这是代码:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class Bb extends JFrame
{
private JTable table;
private DefaultTableModel model;
@SuppressWarnings("unchecked")
public Bb()
{
String aLine ;
Vector columnNames = new Vector();
Vector data = new Vector();
try
{
FileInputStream fin = new FileInputStream("test1.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
while( st1.hasMoreTokens() )
{
columnNames.addElement(st1.nextToken());
}
while ((aLine = br.readLine()) != null)
{
StringTokenizer st2 = new StringTokenizer(aLine, " ");
Vector row = new Vector();
while(st2.hasMoreTokens())
{
row.addElement(st2.nextToken());
}
data.addElement( row );
}
br.close();
}
catch (Exception e)
{
e.printStackTrace();
}
final JTable table = new JTable(new DefaultTableModel(data, columnNames){
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return Integer.class;
}
});
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
JPanel buttonPanel = new JPanel();
getContentPane().add( buttonPanel, BorderLayout.SOUTH );
JButton button1 = new JButton( "Save" );
buttonPanel.add( button1 );
button1.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if ( table.isEditing() )
{
int row = table.getEditingRow();
int col = table.getEditingColumn();
table.getCellEditor(row, col).stopCellEditing();
}
int rows = table.getRowCount();
int columns = table.getColumnCount();
try {
StringBuilder con = new StringBuilder();
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
Object Value = table.getValueAt (i, j);
con.append(" ");
con.append(Value);
}
con.append("\r\n");
}
FileWriter fileWriter = new FileWriter(new File("new.txt"));
fileWriter.write(con.toString());
fileWriter.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
JButton button3 = new JButton( "Refresh" );
buttonPanel.add( button3 );
button3.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
}
});
}
public static void main(String[] args)
{
Bb Re = new Bb();
Re.setDefaultCloseOperation( EXIT_ON_CLOSE );
Re.pack();
Re.setVisible(true);
}
}
文本文件:
a b c d e f e
78 12 12 45 45 45 78
45 45 69 56 78 56 23
45 89 76 42 15 36 23
试试这个:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class Bb extends JFrame {
private JTable table;
private DefaultTableModel model;
Vector columnNames = new Vector();
Vector data = new Vector();
@SuppressWarnings("unchecked")
public Bb() {
String aLine;
try {
FileInputStream fin = new FileInputStream("test1.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
while (st1.hasMoreTokens()) {
columnNames.addElement(st1.nextToken());
}
while ((aLine = br.readLine()) != null) {
StringTokenizer st2 = new StringTokenizer(aLine, " ");
Vector row = new Vector();
while (st2.hasMoreTokens()) {
row.addElement(st2.nextToken());
}
data.addElement(row);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
table = new JTable(new DefaultTableModel(getDefaultData(), columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return Integer.class;
}
});
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
JPanel buttonPanel = new JPanel();
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
JButton button1 = new JButton("Save");
buttonPanel.add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (table.isEditing()) {
int row = table.getEditingRow();
int col = table.getEditingColumn();
table.getCellEditor(row, col).stopCellEditing();
}
int rows = table.getRowCount();
int columns = table.getColumnCount();
try {
StringBuilder con = new StringBuilder();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
Object Value = table.getValueAt(i, j);
con.append(" ");
con.append(Value);
}
con.append("\r\n");
}
FileWriter fileWriter = new FileWriter(new File("new.txt"));
fileWriter.write(con.toString());
fileWriter.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
JButton button3 = new JButton("Refresh");
buttonPanel.add(button3);
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
refresh();
}
});
}
public static void main(String[] args) {
Bb Re = new Bb();
Re.setDefaultCloseOperation(EXIT_ON_CLOSE);
Re.pack();
Re.setVisible(true);
}
private void refresh() {
DefaultTableModel dtm = new DefaultTableModel(getDefaultData(),
columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return Integer.class;
}
};
table.setModel(dtm);
table.revalidate();
}
private Vector getDefaultData() {
Vector defData = new Vector();
for (int i = 0; i < data.size(); i++) {
Vector tmp = (Vector) data.get(i);
Vector nVc = new Vector();
for (int j = 0; j < tmp.size(); j++) {
nVc.addElement(tmp.get(j));
}
defData.add(nVc);
}
return defData;
}
}
这将起作用,但不是一个好习惯,您应该在EDT上运行处理接口的代码,并在另一个线程上运行处理其他部分(文件读取,向量创建)的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句