如何读取文件,将数据放入JTable,然后修改单元格/删除行并将数据保存到文件中? [英] How to read the file, put data in JTable, then modify cell/delete lines and save data to the file?

查看:48
本文介绍了如何读取文件,将数据放入JTable,然后修改单元格/删除行并将数据保存到文件中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从.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

您需要重写DefaultTableModelisCellEditable(...)方法以返回true.

You need to override the isCellEditable(...) method of the DefaultTableModel to return true.

使用GUI删除JT​​able中的某些行

delete some lines in JTable using GUI

您需要知道选择了哪一行,然后使用DefaultTableModelremoveRow(...)方法删除该行.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆