[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)