Java swing如何在JTable中编辑双单元格
Java swing how to edit double cell in JTable
我有一个 Jtable,其中一列显示价格,应该是可编辑的。但是每当我尝试更新单元格值时,我都会遇到异常:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
我的产品型号如下:
public class Product{
private double price;
private String name;
private Icon pic;
public Product(String name, double price){
this.name= name;
this.price = price;
}
public void setPrice(double price){
this.price = price;
}
//other getters and setters
}
在我的自定义 class 扩展 AbstractTableModel 中:
private ArrayList<Product> products;
//constructor and other methods
public void setValueAt(Object val, int row, int col) {
if (col == 2){
try{
double price = Double.parseDouble((String)val);
products.get(row).setPrice(price);
}
catch(Exception e){
}
fireTableCellUpdated(row, col);
}
}
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public Object getValueAt(int rowNo, int column) {
Product item = products.get(rowNo);
switch(column){
case 0: return item.getPic();
case 1: return item.getName();
case 2: return item.getPrice();
default: return null;
}
}
我应该将价格更改为字符串吗?还有其他正常方法可以做到这一点吗?如果我删除 getColumnClass 覆盖价格变化,但我无法显示产品图片,所以这不是解决方案。
此行有问题(我根据您在问题中添加的代码分析的内容)。您只是尝试将 double
对象解析为 String
,这在 java
中是不可能的,因为 String
和 Double
之间没有父子关系。
double price = Double.parseDouble((String)val); //trying to cast double as String.
This line of code will raise ClassCastException
. because of val
is a double
type of Object not a String.
你可以试试这个应该没问题。
double price = (double)val; //try this
谢谢。
我有一个 Jtable,其中一列显示价格,应该是可编辑的。但是每当我尝试更新单元格值时,我都会遇到异常:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
我的产品型号如下:
public class Product{
private double price;
private String name;
private Icon pic;
public Product(String name, double price){
this.name= name;
this.price = price;
}
public void setPrice(double price){
this.price = price;
}
//other getters and setters
}
在我的自定义 class 扩展 AbstractTableModel 中:
private ArrayList<Product> products;
//constructor and other methods
public void setValueAt(Object val, int row, int col) {
if (col == 2){
try{
double price = Double.parseDouble((String)val);
products.get(row).setPrice(price);
}
catch(Exception e){
}
fireTableCellUpdated(row, col);
}
}
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public Object getValueAt(int rowNo, int column) {
Product item = products.get(rowNo);
switch(column){
case 0: return item.getPic();
case 1: return item.getName();
case 2: return item.getPrice();
default: return null;
}
}
我应该将价格更改为字符串吗?还有其他正常方法可以做到这一点吗?如果我删除 getColumnClass 覆盖价格变化,但我无法显示产品图片,所以这不是解决方案。
此行有问题(我根据您在问题中添加的代码分析的内容)。您只是尝试将 double
对象解析为 String
,这在 java
中是不可能的,因为 String
和 Double
之间没有父子关系。
double price = Double.parseDouble((String)val); //trying to cast double as String.
This line of code will raise
ClassCastException
. because ofval
is adouble
type of Object not a String.
你可以试试这个应该没问题。
double price = (double)val; //try this
谢谢。