Java 读取csv文件的值并将其显示在AWT表中

Java 读取csv文件的值并将其显示在AWT表中,java,awt,Java,Awt,我想读取csv文件的值,并在按下开始按钮时在AWT表中显示该值。按下停止按钮应停止读取值。必须使用重置按钮清除表格。我是AWT的新手。 这是我试过的 package AWTTable; import java.awt.*; import java.sql.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.io.BufferedRead

我想读取csv文件的值,并在按下开始按钮时在AWT表中显示该值。按下停止按钮应停止读取值。必须使用重置按钮清除表格。我是AWT的新手。 这是我试过的

package AWTTable;

    import java.awt.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.BufferedReader;
    import java.io.FileReader;

    /**
     *
     * @author Admin
     */
    public class AWTTableUpdate {

        public static void main(String[] args) {
            Frame f = new Frame();
            Label label = new Label("Date and Time ");
            Label label1 = new Label(" Name");
            Label label2 = new Label("contents");
            final Vector columnNames = new Vector();
            final Vector data = new Vector();
            final TextField text = new TextField(20);
            Button b = new Button("Start");
            Button b1 = new Button("Stop");
            Button b2 = new Button("Reset");
            b.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {


                    try {

                        String strFile = "c:/companylist.csv";  

                        BufferedReader br = new BufferedReader(new FileReader(strFile));
                        String strLine = "";
                        StringTokenizer st = null;
                        int lineNumber = 0, tokenNumber = 0;

                        ArrayList<String> arrayList = new ArrayList<String>();

                        while ((strLine = br.readLine()) != null) {
                            lineNumber++;

                            st = new StringTokenizer(strLine, ",");
                            while (st.hasMoreTokens()) {

                                tokenNumber++;
                                arrayList.add(st.nextToken());

                            tokenNumber = 0;
                        }
                       Object[] elements = arrayList.toArray();

                        Scanner input = new Scanner(System.in);
                        System.out.print("Enter Ticker symbol");

                    } }catch (Exception e1) {
                        System.out.println("Exception while reading csv file: " + e1);
                    }

                    JTable table = new JTable(data, columnNames);
                    JScrollPane scrollPane = new JScrollPane(table);
                    JFrame frame = new JFrame();
                    frame.add(scrollPane);
                    frame.setVisible(true);
                    frame.pack();
                    frame.repaint();
                }
            });
            Panel p = new Panel(new GridLayout(6, 6));
            p.add(label);
            p.add(label1);
            p.add(label2);
         //   p.add(text);
            p.add(b);
            p.add(b1);
            p.add(b2);
            f.add(p);
            f.setVisible(true);
            f.pack();
        }
    }
包AWTTable;
导入java.awt.*;
导入java.sql.*;
导入java.util.*;
导入javax.swing.*;
导入java.awt.event.*;
导入java.io.BufferedReader;
导入java.io.FileReader;
/**
*
*@author-Admin
*/
公共类AWTTableUpdate{
公共静态void main(字符串[]args){
帧f=新帧();
标签=新标签(“日期和时间”);
标签标签1=新标签(“名称”);
标签2=新标签(“内容”);
最终向量列名称=新向量();
最终矢量数据=新矢量();
最终文本字段文本=新文本字段(20);
按钮b=新按钮(“开始”);
按钮b1=新按钮(“停止”);
按钮b2=新按钮(“重置”);
b、 addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
试一试{
字符串strFile=“c:/companylist.csv”;
BufferedReader br=新的BufferedReader(新文件读取器(strFile));
字符串strLine=“”;
StringTokenizer st=null;
int lineNumber=0,tokenNumber=0;
ArrayList ArrayList=新的ArrayList();
而((strLine=br.readLine())!=null){
lineNumber++;
st=新的StringTokenizer(strLine,“,”);
而(st.hasMoreTokens()){
数字++;
add(st.nextToken());
令牌数=0;
}
Object[]elements=arrayList.toArray();
扫描仪输入=新扫描仪(System.in);
系统输出打印(“输入股票代码”);
}}catch(异常e1){
System.out.println(“读取csv文件时出现异常:“+e1”);
}
JTable table=新的JTable(数据、列名称);
JScrollPane scrollPane=新的JScrollPane(表);
JFrame=新JFrame();
frame.add(滚动窗格);
frame.setVisible(true);
frame.pack();
frame.repaint();
}
});
面板p=新面板(新网格布局(6,6));
p、 添加(标签);
p、 添加(标签1);
p、 添加(标签2);
//p.添加(文本);
p、 添加(b);
p、 添加(b1);
p、 添加(b2);
f、 加(p);
f、 setVisible(真);
f、 包装();
}
}
我得到的不是表格。点击开始按钮后,我得到一个空白窗口。但是我想显示数据。
谢谢

您的数据向量已初始化,但从未填入数据,在获取元素数组后,您应该有一个“add”语句:

Object[] elements = arrayList.toArray();
data.add(elements);
还可以将这些语句移动到外循环的末尾,这样就可以向数据向量中添加数据行,而不是将每行的所有字段都放在一行中的一行

此外,您可能有兴趣使用“data.clear()”语句链接其中一个按钮


顺便说一句,在计算令牌数量时,我看到内部循环中有一种奇怪的逻辑:

while (st.hasMoreTokens()) {

    tokenNumber++;
    arrayList.add(st.nextToken());

    tokenNumber = 0;
}

循环中的最后一条语句应该在循环外,否则“tokenNumber”变量将始终保持0或1值。

数据向量已初始化,但从未填充数据,在获取元素数组后,应该有一条“add”语句:

Object[] elements = arrayList.toArray();
data.add(elements);
还可以将这些语句移动到外循环的末尾,这样就可以向数据向量中添加数据行,而不是将每行的所有字段都放在一行中的一行

此外,您可能有兴趣使用“data.clear()”语句链接其中一个按钮


顺便说一句,在计算令牌数量时,我看到内部循环中有一种奇怪的逻辑:

while (st.hasMoreTokens()) {

    tokenNumber++;
    arrayList.add(st.nextToken());

    tokenNumber = 0;
}

循环内的最后一条语句应该在循环外,否则“tokenNumber”变量将始终保持0或1值。

并且您没有提供任何列名。为什么需要在while循环中调用scanner?以这种方式将awt与swing结合起来有点奇怪。将代码组织成几个小方法有助于明确您的意图。您是对的,他混合了Swing和AWT,但他只使用Swing组件编写的代码不会显示任何内容,因为他使用空向量初始化表。我只是想解决他的问题,不需要重写所有内容。而且你没有提供任何列名。为什么需要在while循环中调用scanner?以这种方式将awt与swing结合起来有点奇怪。将代码组织成几个小方法有助于明确您的意图。您是对的,他混合了Swing和AWT,但他只使用Swing组件编写的代码不会显示任何内容,因为他使用空向量初始化表。我只是想解决他的问题,不需要重写一切。