Java 从外部文件获取并显示在JTable中

Java 从外部文件获取并显示在JTable中,java,swing,jtable,Java,Swing,Jtable,有人能告诉我如何修改下面的程序吗?程序的数据是通过对象[]【】【】传递的,而不是只给出包含数据的文件名,该文件名应打印在表中 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.eve

有人能告诉我如何修改下面的程序吗?程序的数据是通过
对象[]【】【】
传递的,而不是只给出包含数据的文件名,该文件名应打印在表中

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class SimpleTableDemo extends JPanel {
private boolean DEBUG = false;

public SimpleTableDemo() {                                              
    super(new GridLayout(1,0));

    String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};

    Object[][] data = {
    {"Kathy", "Smith",
     "Snowboarding", new Integer(5), new Boolean(false)},
    {"John", "Doe",
     "Rowing", new Integer(3), new Boolean(true)},
    {"Sue", "Black",
     "Knitting", new Integer(2), new Boolean(false)},
    {"Jane", "White",
     "Speed reading", new Integer(20), new Boolean(true)},
    {"Joe", "Brown",
     "Pool", new Integer(10), new Boolean(false)}
    };

    final JTable table = new JTable(data, columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);

    if (DEBUG) {
        table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                printDebugData(table);
            }
        });
    }

    //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);

    //Add the scroll pane to this panel.
    add(scrollPane);
}

private void printDebugData(JTable table) {
    int numRows = table.getRowCount();
    int numCols = table.getColumnCount();
    javax.swing.table.TableModel model = table.getModel();

    System.out.println("Value of data: ");
    for (int i=0; i < numRows; i++) {
        System.out.print("    row " + i + ":");
        for (int j=0; j < numCols; j++) {
            System.out.print("  " + model.getValueAt(i, j));
        }
        System.out.println();
    }
    System.out.println("--------------------------");
}

/**
 * Create the GUI and show it.  For thread safety,
 * this method should be invoked from the
 * event-dispatching thread.
 */
private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("SimpleTableDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    SimpleTableDemo newContentPane = new SimpleTableDemo();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.setContentPane(newContentPane);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}
import javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
公共类SimpleTableDemo扩展了JPanel{
私有布尔调试=false;
公共SimpleTableDemo(){
超级(新网格布局(1,0));
String[]columnNames={“名字”,
“姓氏”,
“运动”,
“#年”,
“素食者”};
对象[][]数据={
{“凯西”,“史密斯”,
“滑雪板”,新整数(5),新布尔值(假)},
{“约翰”,“多伊”,
“划船”,新整数(3),新布尔值(真)},
{“苏”,“黑”,
“编织”,新整数(2),新布尔值(假)},
{“简”、“白”,
“快速读取”,新整数(20),新布尔值(真)},
{“乔”,“布朗”,
“Pool”、新整数(10)、新布尔值(false)}
};
最终JTable表=新JTable(数据、列名称);
表.setPreferredScrollableViewportSize(新维度(500,70));
表.setFillsViewPerthweight(真);
如果(调试){
表.addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
打印数据(表格);
}
});
}
//创建滚动窗格并将表添加到其中。
JScrollPane scrollPane=新的JScrollPane(表);
//将滚动窗格添加到此面板。
添加(滚动窗格);
}
私有无效printDebugData(JTable表){
int numRows=table.getRowCount();
int numCols=table.getColumnCount();
javax.swing.table.TableModel=table.getModel();
System.out.println(“数据值:”);
对于(int i=0;i
如果我理解的问题是正确的,您可以用如下内容替换对象[][]数据:

    String line;
    ArrayList<String[]> toData = new ArrayList<String[]>();
    File file = new File("\\file path");
    try{
        BufferedReader reader = new BufferedReader(new FileReader(file));
        while ((line = reader.readLine()) != null) {
            String[] lineElements = line.split(",");
            toData.add(lineElements);
        }
    }catch (Exception ex){
        ex.printStackTrace();
        System.out.println("File not found");
    }
    String[][] data = new String[toData.size()][];
    int index = 0;
    for(String[] a: toData){
        data[index]=a;
        index++;
    }
字符串行;
ArrayList toData=新的ArrayList();
文件=新文件(\\文件路径”);
试一试{
BufferedReader reader=新的BufferedReader(新文件读取器(文件));
而((line=reader.readLine())!=null){
String[]lineElements=line.split(“,”);
添加(线条元素);
}
}捕获(例外情况除外){
例如printStackTrace();
System.out.println(“未找到文件”);
}
字符串[][]数据=新字符串[toData.size()][];
int指数=0;
for(字符串[]a:toData){
数据[索引]=a;
索引++;
}
在本例中,如果文件中的数据格式为: 姓名,姓氏,sportage,是素食者。不过,您可以很容易地进行更改,但请记住还要更改line.split()中括号中的符号

编辑: 我不完全理解您想要实现的目标,但我会这样做:

    String line;
    ArrayList<String[]> toData = new ArrayList<String[]>();
    File file = new File("\\file path");
    try{
        BufferedReader reader = new BufferedReader(new FileReader(file));
        while ((line = reader.readLine()) != null) {
            String[] lineElements = line.split(",");
            toData.add(lineElements);
        }
    }catch (Exception ex){
        ex.printStackTrace();
        System.out.println("File not found");
    }
    String[][] data = new String[toData.size()][];
    int index = 0;
    for(String[] a: toData){
        data[index]=a;
        index++;
    }

import javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.*;
导入java.util.ArrayList;
公共类项目{
私有JScrollPane滚动窗格;
私有JFrame;
专用JTable表;
公共静态void main(字符串[]args){
项目=新项目();
project.createGUI();
}
public void createGUI(){
frame=新的JFrame();
scrollPane=新的JScrollPane();
JPanel面板=新的JPanel();
JButton open=新JButton(“open”);
open.addActionListener(新的OpenListener());
JButton submit=新JButton(“提交”);
submit.addActionListener(新SubmitListener());
JButton cancel=新JButton(“取消”);
addActionListener(新的CancelListener());
面板。添加(打开);
专家组。添加(提交);
面板。添加(取消);
frame.getContentPane().add(BorderLayout.CENTER,scrollPane);
frame.getContentPane().add(BorderLayout.SOUTH,面板);
框架。设置尺寸(500500);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void createAndDisplayList(字符串[][]数据){
String[]columnNames={“名字”、“姓氏”、“运动”、“年岁”、“素食者”};
表=新的JTable(数据、列名称);
frame.setVisible(假);
框架。移除(滚动窗格);
scrollPane=新的JScrollPane(表);
frame.getContentPane().add(BorderLayout.CENTER,scrollPane);
frame.revalidate();
frame.setVisible(true);
}
私有类OpenListener实现ActionListener{
@凌驾
已执行的公共无效诉讼(诉讼E)