影响JTable单元格值在文本文件上更改(Effect JTable Cell Value Changing On Text file)

编程入门 行业动态 更新时间:2024-10-27 13:29:23
影响JTable单元格值在文本文件上更改(Effect JTable Cell Value Changing On Text file)

我使用这种方法来改变我的表格单元格值,它改变了jtable但不改变文本文件!

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

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

Second Class:

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

My Text File:

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的示例代码。 我希望这会为你提供一个很好的视角来完成你的任务:

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

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

更多推荐

本文发布于:2023-07-30 01:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1321435.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文本文件   单元格   Effect   JTable   Text

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!