2016-05-29 8 views
0

私はJTableを持っています。ユーザーが列を選択すると、浮動小数点データがArrayListに追加されます。 ArrayListについていくつかの統計を後で実行しようとします。ArrayListはリスナーの外では利用できません

現在、私はArrayListに必要なデータを追加して管理しており、リスナー内からコンソールに印刷するときにデータを見ることができます。しかし、たとえArrayListがリスナの外側から宣言されていても、リスナの外部からはデータが得られません。

 TableColumnModel columnModelCompareL = table_CompareL.getColumnModel(); 
     ArrayList<Float> statsCompareL=new ArrayList<Float>(); 
     columnModelCompareL.addColumnModelListener(new TableColumnModelListener() { 
        public void columnSelectionChanged(ListSelectionEvent e) { 
          Object[] data = columnToArray(table_CompareL,table_CompareL.getSelectedColumn()); 
         System.out.println("MY data length"+data.length); 
         try { 
          for(int i = 0; i < data.length; i++){ 
           if (data[i]!=null){ 
           try { 
            statsCompareL.add(Float.parseFloat((data[i]).toString().trim())); 
           } catch (Exception e1) { 
            System.out.println("nought to add here"); 
           } 
           } 
          } 
         } catch (NumberFormatException e1) { 
          System.out.println("You haven't selected a numeric column. Please select again"); 
         } 
        } 
        @Override 
        public void columnAdded(TableColumnModelEvent e) { 
        } 

        @Override 
        public void columnRemoved(TableColumnModelEvent e) { 
        } 

        @Override 
        public void columnMoved(TableColumnModelEvent e) { 
        } 

        @Override 
        public void columnMarginChanged(ChangeEvent e) { 
        } 
       }); 

     System.out.println("statsCompareL"+statsCompareL); 
+0

あなたはクラスの任意のメソッドの外でのArrayListを宣言しようとしたことがあり、それはあなたのクラス内anywere利用できるようになりますようにすることで?。 – theVoid

+0

はい。私はクラスの上に置いた。私はそれがリスナーからvoidを返すためだと思ったのですが、ArrayList の代わりにvoidのリストを表示しているようです –

+0

最後のコード行が何かを出力することを期待するなら、それはできません。そのコード行はuiの作成中に実行されるため、リスナーは(ユーザーがuiとやりとりしている間に)かなり後で呼び出されるためです。 –

答えて

1

更新されたArrayListはUI構築コード内には表示されません(このコードはArrayListが更新されるずっと前に終了するため)。

それは他のイベントリスナ内が提供されています:

 TableColumnModel columnModelCompareL = table_CompareL.getColumnModel(); 
    ArrayList<Float> statsCompareL=new ArrayList<Float>(); 
    columnModelCompareL.addColumnModelListener(new TableColumnModelListener() { 
     // implementation left out for brevity 
    }); 

    // this runs during construction time, long before statsCompareL is updated 
    System.out.println("statsCompareL"+statsCompareL); 

    JButton testButton = new JButton("Test ArrayList"); 
    testButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // this runs after the button is clicked, so it will see the changes statsCompareL 
      System.out.println("statsCompareL"+statsCompareL); 
     } 
    }); 
    // add the button somewhere convenient for testing purposes 
関連する問題