[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: JDK1.2.2,HJTableでIllegalArgumentException




えんどうです。

>higa.dbswing.HJTable#setValueAt()には、
>どういうデータが渡ってますか。
>でも、そのメソッドが呼ばれる前にエラーに
>なっているようですね。
>
>TableModelのgetColumnClass()がNumber.classを
>かえすような単純なTableModelを
>作成して試すとどうですか。

とりあえずこんな風に変えてみました。

    //grid_.setDataSet(dataset_);
    grid_.setModel( new AbstractTableModel() {
      int[] data = new int[10 * 10];
      { for (int i=0; i<10*10; i++) data[i] = i; }
      public int getColumnCount() { return 10; }
      public int getRowCount() { return 10;}
      public Object getValueAt(int row, int col) { return new Integer(data[row*col]); }
      public void setValueAt(Object o, int row, int col) {
        System.out.println("o=" + o + ", o.class=" + o.getClass().toString() + ", row=" + row + ", col=" + col);
        data[row*col] = Integer.parseInt(o.toString());
      }
      public boolean isCellEditable(int row, int col) { return true; }
      public Class getColumnClass(int columnIndex) { return Number.class; }
    });
    JScrollPane scroll = new JScrollPane(grid_);
    rootpanel.add(scroll, BorderLayout.CENTER);

実行結果はこんなぐいあいです。

セルに "0500" を入力すると..

    o=0500, o.class=class java.lang.String, row=0, col=0

setValueAt() は成功してます。

セルに "500aaaaa" を入力すると..

    o=500aaaaa, o.class=class java.lang.String, row=0, col=1

setValueAt() は当然 NumberFormatException です。

# なんだか getColumnClass() が呼ばれていないような気がする..

>最悪の場合、higa.dbswing.HTableModel#getColumnClass()が
>常に、String.classを返すように変更すると大丈夫だと
>思います。

やってみました。

  public Class getColumnClass(int columnIndex) {
    //int type = dataSet.getColumn(columnIndex).getType();
    //if (JDBCUtil.isNumber(type)) {
    //  return Number.class;
    //} else {
    //  return String.class;
    //}
    return String.class;//TEST
  }

Exception は発生しなくなりました。

# これで良いのでしょうか...
-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Japanese Only)