Reputation: 83
I have designed default table model in JTable properties of swing eclipse. so when i tried to do calculations get error......Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
public class punchingPBill extends JFrame
{
DefaultTableModel model;
Double rate,discount,amount,exciseduty,outputvat;
{
String[] columnNames = {"Sr.No", "Description Of Goods", "quantity", "Rate", "Per", "Discount", "Basic Excise Duty", "Output Vat", "Amount"};
Object[][] data = { {new Integer(1),"",new Integer(1), new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0)}};
model = new DefaultTableModel(data, columnNames);
}
table.setModel(model);
table.setRowHeight(25);
private void setTableModelListener()
{
System.out.println("enter listen");
TableModelListener tableModelListener = new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
if (e.getType() == TableModelEvent.UPDATE)
{
System.out.println("Cell " + e.getFirstRow() + ", "
+ e.getColumn() + " changed. The new value: "
+ table.getModel().getValueAt(e.getFirstRow(),
e.getColumn()));
int row = e.getFirstRow();
int column = e.getColumn();
if(column == 2||column == 3||column == 5)
{
Integer quantity = ((Integer) model.getValueAt(row, 2)).intValue();
rate = ((Double) model.getValueAt(row, 3)).doubleValue();
discount=((Double) model.getValueAt(row, 5)).doubleValue();
amount=new Double(rate-(quantity*rate*(discount/100)));
model.setValueAt(amount, row, 8);
}
}
}
};
table.getModel().addTableModelListener(tableModelListener);
}
got errors at- Integer quantity = ((Integer) model.getValueAt(row, 2)).intValue();.......rate = ((Double) model.getValueAt(row, 3)).doubleValue();......discount=((Double) model.getValueAt(row, 5)).doubleValue();
Upvotes: 1
Views: 10237
Reputation: 14572
You forgot to tell that this happened when you change the value.
Since you are editing the value, it use an JTextComponent (A JTextField most likely) to get the value (the cell showing a cursor), so the result is coming for JTextComponent.getText()
as a String
, not an Integer
. So you need to parse the value with :
Integer.parseInt(string)
Of course, this will throw an exception if you input a not integer value.
EDIT : You can see the type changement if you print the class of it :
System.out.println(model.getValueAt(row, 2));
System.out.println(model.getValueAt(row, 2).getClass());
Before you update it, it will output
1
Integer
After you input anything (let say 2)
2
String
Here is one way to be sure this will work before and after and edit : (with correct format input, won't work if you input alphabetic value)
if (column == 2 || column == 3 || column == 5) {
Integer quantity = Integer.parseInt(model.getValueAt(row, 2).toString());
rate = Double.parseDouble(model.getValueAt(row, 3).toString());
discount = Double.parseDouble(model.getValueAt(row, 5).toString());
amount = new Double(rate - (quantity * rate * (discount / 100)));
model.setValueAt(amount, row, 8);
}
The solution would be to manage the editing to parse the value directly but this would ask more code
Upvotes: 1
Reputation: 7730
I am assuming below line is throwing this exception:
Integer quantity = ((Integer) model.getValueAt(row, 2)).intValue();
Try debugging what is getting returned from model.getValueAt(row, 2)
, if it returns String then you need to use:
Integer.parseInt(returnedValueFromMethodCall);
Upvotes: 1
Reputation: 248
You can use Integer.parseInt("StringValue") in place of casting where "StringValue" should be a proper number value which can be converted to Integer
Upvotes: 1