在文本文件上更改JTable单元格值的效果 [英] Effect JTable Cell Value Changing On Text file
本文介绍了在文本文件上更改JTable单元格值的效果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用这种方法来更改表格单元格的值, 它会在jtable上更改,但不会在文本文件上更改!
I use this method for changing my table cell value, it change on jtable But not change on text file!
public class user_AllBooks extends AbstractTableModel {
BookInformation book_info = new BookInformation();
String[] columns = new String[]{"Book Name", "Book Date", "Book ID", "Borrow Status"};
ArrayList<BookInformation> bData = new ArrayList<BookInformation>();
public user_AllBooks() {
try {
BufferedReader br = new BufferedReader(new FileReader("AllBookRecords.txt"));
String line;
while ((line = br.readLine()) != null) {
bData.add(initializeBookData(line));
}
br.close();
} catch (IOException ioe) {
}
}
public BookInformation initializeBookData(String myline) {
BookInformation book_infos = new BookInformation();
String[] celledLine = myline.split(" ");
book_infos.setBookName(celledLine[0]);
book_infos.setBookDate(celledLine[1]);
book_infos.setBookID(celledLine[2]);
book_infos.setBorrowStatus(celledLine[3]);
return book_infos;
}
@Override
public String getColumnName(int col) {
return columns[col];
}
@Override
public int getRowCount() {
if (bData != null) {
return bData.size();
} else {
return 0;
}
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
BookInformation bookInf = bData.get(rowIndex);
Object value;
switch (columnIndex) {
case 0:
value = bookInf.getBookName();
break;
case 1:
value = bookInf.getBookDate();
break;
case 2:
value = bookInf.getBookID();
break;
case 3:
value = bookInf.getBorrowStatus();
break;
default:
value = "...";
}
return value;
}
@Override
public void setValueAt(Object value, int row, int col)
{
BookInformation book_infos = bData.get(row);
if (col==0)
book_infos.setBookName((String)value);
else if (col==1)
book_infos.setBookDate((String)value);
else if (col==2)
book_infos.setBookID((String)value);
else if (col==3)
book_infos.setBorrowStatus((String)value);
}
}
第二堂课
public class user_AllBooksM extends JFrame implements ActionListener {
user_AllBooks uAllBooks = new user_AllBooks();
final JTable bTable = new JTable(uAllBooks);
JButton borrowButton;
public user_AllBooksM() {
setTitle("All Books");
exitButton = new JButton("Exit");
borrowButton = new JButton("Borrow");
borrowButton.addActionListener(this);
JPanel Bpanel = new JPanel();
Bpanel.setLayout(new FlowLayout());
JScrollPane sp = new JScrollPane(bTable);
Bpanel.add(sp);
Bpanel.add(borrowButton);
this.add(Bpanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(300, 60, 550, 550);
this.setResizable(false);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
borrowInitialize(bTable.getSelectedRow());
}
public void borrowInitialize(int row) {
if (uAllBooks.getValueAt(row, 3).equals("yes")) {
JOptionPane.showMessageDialog(null, "This Book Was Borrowed");
} else {
uAllBooks.setValueAt("Yes", row, 3);
uAllBooks.fireTableRowsUpdated(row, row);
}
}
public static void main(String[] args) {
new user_AllBooksM();
}
}
我的文本文件:
sds wew 88 77 no
moon 889 988 yes
ccc 30 33 no
testing 76 77 no
yes 999 444 no
hoop 100 200 no
name 60 20 no
pp 14 15 no
vbnet 49 94 yes
sdsd 232 dsds no
gh 12 21 no
khoyBook 322 233 no
推荐答案
要在更改单元格值时更改文件的内容,应将TableModelListener
注册到关联的TableModel
.并在tableChanged
方法中实现文件写入逻辑.
这是演示如何实现TableModelListener
的示例代码.我希望这可以为您提供一个完成任务的好方法:
To change the Content of file when cell value is changed , You should register the TableModelListener
to the associated TableModel
. And implement the file writing Logic in tableChanged
method.
Here is the sample code that demonstrates how to implement TableModelListener
. I hope this would provide you a good view to achieve your task:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.event.TableModelListener;
import javax.swing.event.TableModelEvent;
import javax.swing.table.TableModel;
import javax.swing.table.AbstractTableModel;
class TableDemo extends JFrame implements TableModelListener
{
private JTable table;
private JScrollPane jsPane;
private TableModel myModel;
private JLabel label;
public void prepareAndShowGUI()
{
myModel = new MyModel();
table = new JTable(myModel);
jsPane = new JScrollPane(table);
label = new JLabel();
myModel.addTableModelListener(this);
getContentPane().add(jsPane);
getContentPane().add(label,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
@Override
public void tableChanged ( TableModelEvent evt)
{
int row = evt.getFirstRow();
int col = evt.getColumn();
label.setText("Value at ["+row+"]["+col+"] is changed to: "+myModel.getValueAt(row,col));
//Write to your file here.
}
private class MyModel extends AbstractTableModel
{
String[] columns = {
"Roll No.",
"Name"
};
String[][] inData = {
{"1","Anthony Hopkins"},
{"2","James William"},
{"3","Mc. Donald"}
};
@Override
public void setValueAt(Object value, int row, int col)
{
inData[row][col] = (String)value;
fireTableCellUpdated(row,col);
}
@Override
public Object getValueAt(int row, int col)
{
return inData[row][col];
}
@Override
public int getColumnCount()
{
return columns.length;
}
@Override
public int getRowCount()
{
return inData.length;
}
@Override
public String getColumnName(int col)
{
return columns[col];
}
@Override
public boolean isCellEditable(int row, int col)
{
return true;
}
}
public static void main(String st[])
{
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
TableDemo td = new TableDemo();
td.prepareAndShowGUI();
}
});
}
}
这篇关于在文本文件上更改JTable单元格值的效果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文