2012-03-25 19 views
1

csvファイルの値を読み込み、開始ボタンを押したときにAWTテーブルにその値を表示します。停止ボタンを押すと、値の読み込みを停止する必要があります。テーブルをクリアするには、リセットボタンを使用する必要があります。私はAWTが初めてです。 これは私が試したものです。csvファイルの値を読み込んで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(); 
     } 
    } 

私が得るのは、テーブルの形ではありません。開始ボタンをクリックすると、空白のウィンドウが表示されます。しかし、私はそのデータを表示したい。 は、あなたのデータベクトルを初期化するが、データで埋めされることはありません

答えて

1

、あなたは要素の配列を取得した後の文を「追加」している必要がありますありがとう:

Object[] elements = arrayList.toArray(); 
data.add(elements); 

はまたの最後に、これらのステートメントを移動しますアウターループを使用しているため、単一の行ではなく、すべての行のすべてのフィールドが単一の行ではなく、データの行にデータベクタを追加できます。

また、ボタンの1つを「data.clear()」ステートメントにリンクすることもできます。ところで


トークンの数を数えるとき、私はあなたの内側のループ内の奇妙なロジックの種類を参照してください。そのループ内

while (st.hasMoreTokens()) { 

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

    tokenNumber = 0; 
} 

あなたの最後の文は、それの外である必要があり、そうでない場合は、あなたの"tokenNumber"変数は常に0または1の値を保持します。

+0

そして、列名を指定していません。そしてなぜループ中にスキャナを呼び出す必要がありますか?そして、そのようにしてawtとswingをミックスするのは少し奇妙です。コードをいくつかの小さなメソッドに構造化することは、途中であなたの意図を明確にするのに役立ちます。 – nansen

+0

あなたは正しいです、彼はSwingとAWTをミックスしていますが、Swingコンポーネントだけで書かれたコードは空のベクトルでテーブルを初期化しているので何も表示しません。私はすべてを書き直す必要なしに彼の問題を解決しようとしています。 –

関連する問題