如何读取文件,将数据放入JTable,然后修改单元格/删除行并将数据保存到文件中? [英] How to read the file, put data in JTable, then modify cell/delete lines and save data to the file?
问题描述
我需要从.txt文件中读取日期,并将其放入GUI中的JTable中,然后修改一些记录或删除一些行并将新数据保存到该文件中. 我可以阅读并显示JTable,但是如何使用GUI编辑日期或删除JTable中的某些行,然后将其保存到文件中?
I need to read the date from the .txt file put it into JTable in my GUI, then modify some records or delete some lines and save new data to the file. I can do the reading and show JTable but how to edit the date or delete some lines in JTable using GUI then save it to the file?
推荐答案
但是如何编辑
but how to edit
您需要重写DefaultTableModel
的isCellEditable(...)
方法以返回true
.
You need to override the isCellEditable(...)
method of the DefaultTableModel
to return true
.
使用GUI删除JTable中的某些行
delete some lines in JTable using GUI
您需要知道选择了哪一行,然后使用DefaultTableModel
的removeRow(...)
方法删除该行.
You need to know which row(s) is selected and then use the removeRow(...)
method of the DefaultTableModel
to delete the row.
例如:
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;
public class ItemDeletion extends JPanel
{
private JList<String> list;
private JTable table;
public ItemDeletion()
{
setLayout( new BorderLayout(5, 5) );
String[] items =
{
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten"
};
// Add the list
DefaultListModel<String> listModel = new DefaultListModel<String>();
for (String item: items)
listModel.addElement( item );
list = new JList<String>( listModel );
JButton listDelete = new JButton( "Delete From List" );
listDelete.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
DefaultListModel model = (DefaultListModel)list.getModel();
int row = list.getSelectedIndex();
while (row != -1)
{
model.removeElementAt( row );
row = list.getSelectedIndex();
}
}
});
JPanel listPanel = new JPanel( new BorderLayout(5, 5) );
listPanel.add(new JScrollPane( list ), BorderLayout.CENTER);
listPanel.add(listDelete, BorderLayout.PAGE_END);
// Add the table
DefaultTableModel tableModel = new DefaultTableModel(0, 1);
List<String> tableItems = Arrays.asList( items );
Collections.shuffle( tableItems );
for (String item: tableItems)
{
System.out.println( item );
tableModel.addRow( new String[]{item} );
}
table = new JTable( tableModel );
table.setAutoCreateRowSorter(true);
((DefaultRowSorter)table.getRowSorter()).toggleSortOrder(0);
JButton tableDelete = new JButton( "Delete From Table" );
tableDelete.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
DefaultTableModel model = (DefaultTableModel)table.getModel();
int row = table.getSelectedRow();
while (row != -1)
{
int modelRow = table.convertRowIndexToModel( row );
model.removeRow( modelRow );
row = table.getSelectedRow();
}
}
});
JPanel tablePanel = new JPanel( new BorderLayout(5, 5) );
tablePanel.add(new JScrollPane( table ), BorderLayout.CENTER);
tablePanel.add(tableDelete, BorderLayout.PAGE_END);
add(listPanel, BorderLayout.LINE_START);
add(tablePanel, BorderLayout.LINE_END);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Multiple Item Deletion");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ItemDeletion(), BorderLayout.NORTH);
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
要保存到文件吗?
save it to the file?
您需要从DefaultTableModel
获取数据.您可以使用getValueAt(...)
方法检索每个值.
You need to get the data from the DefaultTableModel
. You can use the getValueAt(...)
method to retrieve each value.
因此,您需要创建类似以下内容的代码:
So you would need to create code something like:
for (each row);
{
StringBuilder sb = new StringBuilder();
for ( each column)
{
Object data = model.getValueAt(...);
sb.append( data.toString() );
}
write the sb.toString() to the file
}
这篇关于如何读取文件,将数据放入JTable,然后修改单元格/删除行并将数据保存到文件中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!