2016-07-12 1 views
0

2つの列を持つJTableがあります。最初のものはちょうどその曜日の名前を内容にし、もう1つは内容をdoubleという値にします。JTableの型のエラー

  • この方法では、テストのためdouble値を自動生成:

    private void autoGenerate(java.awt.event.ActionEvent evt) { 
         for (int a=0; a<Config.n; a++){ 
          tabla.setValueAt(a - a*0.5, a, 1);} 
    
    
    } 
    
  • がプロットに

    は、3つのボタンがあります。私はautoGenerateボタンのすべての作品を使用して値を生成した後、BDにデータを保存しようとするとBD

をテーブルの値を保存するには

  • 。私は値を入力した後にBDにデータを保存しようとすると ただし、手動でエラーが発生します。

    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double 
    at project.Graph.jButton5ActionPerformed(Graph.java:286) 
    

    データを保存]ボタンこの行います。しかし

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt,Patient p) { 
        try { 
         for (int k = 0; k < Config.n; k++) { 
          DBManager.save(p, k+1,(double)this.table.getValueAt(k, 1)); 
         } 
        } catch (SQLException e) { 
         System.out.println(e.getMessage()); 
        } 
    } 
    
  • 答えて

    2

    を値を手動で入力した後にデータをBDに保存しようとすると、エラーが発生します。

    カラム・クラスまたはCellEditorの他の変更を行わずに、JTable UIで値を編集すると、Stringオブジェクトがモデルに格納されます。したがって、ClassCastExceptionは値を取得してdoubleにキャストしようとしています。 TableModelで明示的に列クラスを定義することを検討してください。Doubleオブジェクトがモデルに格納されるだけでなく、CellEditorにも影響します(非数値データの入力時にエラーを避ける)。

    DefaultTableModel model = new DefaultTableModel(){ 
        @Override 
        public Class<?> getColumnClass(int col){ 
         if (col == 1){ 
          return Double.class; 
         } 
         return String.class; 
        } 
        @Override 
        public int getColumnCount(){ 
         return 2; 
        } 
    }; 
    JTable table = new JTable(model); 
    
    +0

    ありがとう、私はそれを知らなかった:) –