2017-10-31 5 views
0

Object型を返すことがわかっていますが、型を最適な型に変更する方法はありますか?たとえば、セルを調べ、浮動小数点数の場合は浮動小数点数に、文字列は文字列に変更されます。getValueAt()によって返されるセルの型を知るには?

EDIT

わかりましたが、セルがJTableの中で、私はあったフィルタを作成しようとしている、ユーザーが唯一の範囲内のものを保持して列をフィルタリングするために2つの数値を入力します。

キャストしようとしましたif((Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()))が動作しますが、テーブルの値がlongであり、実行時にエラーを返すことがあります。

+0

種類を?あなたはどこからそれを手に入れますか?これまでに何を試しましたか? – Stultuske

+0

はい、 'TableModel#getColumnClass(int)'は列の型を返します。 –

+0

@Stultuske私は自分の質問を編集しました。 – Abdane

答えて

1

あなたは

if(value instanceof float) 

それとも

if(value instanceof long) 
+0

ありがとう、完璧にうまくいった:) – Abdane

1

を使用することができ、JavaのすべてのオブジェクトはObjectの相続人です。つまり、Objectの代わりに、あなたが望むものすべてを返すことができます。

public class MyTableModel extends DefaultTableModel implements TableModel { 

    @Override 
    public Class<?> getColumnClass(int column) { 
     switch (column) { 
      case 0: return Integer.class; 
      case 1: return Double.class; 
      case 2: return Boolean.class; 
      case 3: return Date.class; 
      case 4: return String.class; 
     } 

     return Object.class; 
    } 

    @Override 
    public Object getValueAt(int row, int column) { 
     switch (column) { 
      case 0: return 1; 
      case 1: return 1.2; 
      case 2: return true; 
      case 3: return new Date(); 
      case 4: return "My Text Value"; 
     } 

     return new Object(); 
    } 
} 

あなたが直接オブジェクトをターゲットにすることができます(等号のような)オブジェクトの仮想メソッドを使用している場合:あなたは適切な型に明示的なキャストを作成する必要があります、より具体的な事柄については

textfield.getText().equals(model.getValueAt(1, 4)); 

を(それはTableMOdel#getColumnClass(int)を返す)。

更新: モデルでは、値の取得に明示的なキャストを保存するテンプレートメソッドを追加できます。

public <T> T getValue(int row, int column) { 
    return (T) getValueAt(row, column); 
} 

次のようにあなたは、セルの値を使用することができます:セルの

Integer var0 = model.getValue(1, 0); 
Double var1 = model.getValue(1, 1); 
Boolean var2 = model.getValue(1, 2); 
Date var3 = model.getValue(1, 3); 
String var4 = model.getValue(1, 4); 
+0

ありがとうございました!今すぐ完璧に動作します:) – Abdane

関連する問題