Java 如何从.dat文件读取并填充到JTable中?

Java 如何从.dat文件读取并填充到JTable中?,java,swing,jtable,edt,Java,Swing,Jtable,Edt,我需要从scores.dat文件中读取数据,并将其弹出到JTable,以下是更多信息: 得分。dat看起来像 Team Name Score1 Score2 Red John 55 7 Blue Michael 33 6 Green Burrs 55 5 位置=C:\Documents\scores.dat 第一行是列名。所以需要将列名弹出到表的第一行 Scores.dat是动态的,通过用户操作添加/删除行 此外,我需

我需要从
scores.dat
文件中读取数据,并将其弹出到
JTable
,以下是更多信息:

  • 得分。dat
    看起来像

    Team  Name   Score1    Score2
    Red    John    55        7
    Blue   Michael 33        6
    Green  Burrs   55        5
    
    位置=
    C:\Documents\scores.dat

  • 第一行是列名。所以需要将列名弹出到表的第一行

  • Scores.dat
    是动态的,通过用户操作添加/删除行

  • 此外,我需要一个按钮“TopScorer”下的表格,点击时,突出显示最高分数的行

  • 这是我的密码:

    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JSeparator;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableModel;
    
    /**
     *
     * @author singh_000
     */
    public class SampleJTableDemo extends JFrame implements ActionListener {
    
        /**
         * Creates new form OrderMateRequestForm
         */
        public SampleJTableDemo() {
            initComponents();
        }
    
        private void initComponents() {
            //headers for the table
            String[] columns = new String[]{
                "Team", "Name", "Score1", "Score2"//Todo: pop names from 1st row from scores.dat
            };
    
            //actual data for the table in a 2d array
            Object[][] data = new Object[][]{
                {"Red", "John", 40.0, 7},
                {"Blue", "Rambo", 70.0, 6},
                {"Gree", "Zorro", 60.0, 7},
                {"Black", "Curran", 70.0, 5},};
    
            final Class[] columnClass = new Class[]{
                String.class, String.class, Double.class, Integer.class
            };
            //create table model with data
            DefaultTableModel model = new DefaultTableModel(data, columns) {
                @Override
                public boolean isCellEditable(int row, int column) {
                    return false;
                }
    
                @Override
                public Class<?> getColumnClass(int columnIndex) {
                    return columnClass[columnIndex];
                }
            };
    
            JTable table = new JTable(model);
    
            Container contentPane = this.getContentPane();
            contentPane.setLayout(new FlowLayout());
    //        contentPane.add(table);
    
            JScrollPane scrollPane = new JScrollPane(table);
            contentPane.add(scrollPane);
    
            JSeparator separator = new JSeparator();
            separator.setVisible(true);
            contentPane.add(separator);
            //add the table to the frame
    //        this.add(new JScrollPane(table));
    //ToDO: Add buton for top scorer        
    JButton button = new JButton("Top Scorer");
            button.setVisible(true);
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
    
                }
            });
            this.setTitle("Score-List");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.pack();
            this.setVisible(true);
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new SampleJTableDemo();
                }
            });
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
        }
    
    }
    
    导入java.awt.Container;
    导入java.awt.FlowLayout;
    导入java.awt.event.ActionEvent;
    导入java.awt.event.ActionListener;
    导入javax.swing.JButton;
    导入javax.swing.JFrame;
    导入javax.swing.JScrollPane;
    导入javax.swing.jsepator;
    导入javax.swing.JTable;
    导入javax.swing.SwingUtilities;
    导入javax.swing.table.DefaultTableModel;
    /**
    *
    *@作者singh_000
    */
    公共类SampleJTableDemo扩展JFrame实现ActionListener{
    /**
    *创建新表单OrderMateRequestForm
    */
    公共样本tabledemo(){
    初始化组件();
    }
    私有组件(){
    //表的标题
    字符串[]列=新字符串[]{
    “团队”、“名称”、“分数1”、“分数2”//Todo:scores.dat中第一行的pop名称
    };
    //二维数组中表格的实际数据
    对象[][]数据=新对象[][]{
    {“红色”,“约翰”,40.0,7},
    {“蓝色”,“兰博”,70.0,6},
    {“格力”,“佐罗”,60.0,7},
    {“黑色”,“柯伦”,70.0,5},};
    最终类[]列类=新类[]{
    String.class、String.class、Double.class、Integer.class
    };
    //使用数据创建表模型
    DefaultTableModel=新的DefaultTableModel(数据、列){
    @凌驾
    公共布尔值可编辑(int行,int列){
    返回false;
    }
    @凌驾
    公共类getColumnClass(int columnIndex){
    返回columnClass[columnIndex];
    }
    };
    JTable table=新的JTable(模型);
    容器contentPane=this.getContentPane();
    setLayout(新的FlowLayout());
    //contentPane.add(表);
    JScrollPane scrollPane=新的JScrollPane(表);
    添加(滚动窗格);
    jsepator separator=新的jsepator();
    separator.setVisible(true);
    contentPane.add(分隔符);
    //将表格添加到框架中
    //添加(新的JScrollPane(表));
    //ToDO:为最佳射手添加buton
    JButton button=新JButton(“得分最高者”);
    按钮。设置可见(真);
    addActionListener(新建ActionListener()){
    @凌驾
    已执行的公共无效操作(操作事件e){
    }
    });
    本文件的标题为“得分列表”;
    此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    这个包();
    此.setVisible(true);
    }
    /**
    *@param指定命令行参数
    */
    公共静态void main(字符串[]args){
    SwingUtilities.invokeLater(新的Runnable(){
    @凌驾
    公开募捐{
    新的SampleJTableDemo();
    }
    });
    }
    @凌驾
    已执行的公共无效操作(操作事件e){
    }
    }
    
    当我读取第一行时,我试图设置团队参数,但得到的NumberFormat异常为Team。SetCore1(int)需要整数,而BufferReader中的readLine()包含字符串(列名)

    因此,当您读取第一行时,您将数据解析为字符串

    String[] columnNames = line.split(" ");
    
    读取其他行时,需要将字符串数据转换为正确的数据类型:

    String[] lineData = theNextLine.split(" " );
    String team = lineData[0];
    String name = lineData[1];
    Double score1 = Double.parseDouble( lineData[2] );
    Integer score2 = Integer.parseInt( lineData[3] );
    

    现在,您可以使用DefaultTableModel的addRow(…)方法将数据添加到表中。

    欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。具体来说:你不只是发布你的作业和一些代码;然后期望我们阅读您的所有代码,以了解它与您的家庭作业不匹配的确切位置。到目前为止,这是这样写的:“这是我老师给我的模板。用代码填充它”。不。为了让人们更容易测试@GhostCat建议的数据,假设数据已经被读入MCVE中的
    字符串和
    字符串的硬代码中。将数据限制为仅两个条目以保持其简短。顺便说一句-“从.dat文件读取并填充到JTable?”-您在读取或填充哪个部分有问题?如果“都是”,则需要将问题分为两部分,并分别处理。@andrewhompson填充数据,因为.dat文件的第一行是所有字符串(列名),后续行也包含整数。我使用BufferReader读取数据。当我创建团队对象时(参数名,score1,score2)。当我阅读第一行时,我试图设置团队参数,但作为团队获取NumberFormat异常。setScore1(int)需要整数,而BufferReader中的readLine()包含字符串(列名)。请关注一个问题。