每次我删除/添加JTable时都会出错。它成功删除了行,但每当我再次重新填充我的表时,我调用table_order()就会显示错误。但是当我更新它时它工作正常。无法弄清楚为什么只是初学者。
继承我删除按钮的代码:
String codev = code.getText();
String namev = name.getText();
String pricev = price.getText();
String descv = desc.getText();
try{
conn = ConnectionDB.connectDB();
String sql = "SELECT * FROM items WHERE item_code = '"+codev+"'";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
if(codev.equals("") || namev.equals("") ||pricev.equals("") || descv.equals("") || check.equals("")){
JOptionPane.showMessageDialog(null, "Please fill up all fields.", "ERROR", JOptionPane.ERROR_MESSAGE);
}
else if(rs.next()){
ps = conn.prepareStatement("DELETE FROM items WHERE item_code='"+codev+"'");
int row = ps.executeUpdate();
if(row == 1){
JOptionPane.showMessageDialog(this, "Item successfully deleted.", "SUCCESS", JOptionPane.INFORMATION_MESSAGE);
table_item.removeAll();
table_order();
reset();
}
}
else{
JOptionPane.showMessageDialog(null, "Item doesnt exist. Please select item.", "ERROR", JOptionPane.ERROR_MESSAGE);
}
}
catch(SQLException | HeadlessException ex){
System.out.println(ex);
}
table_order:
Queryy mq = new Queryy();
ArrayList<Product> list = mq.BindTable();
String[] columnName = {"Code","Name","Price","Description","Availability","Icon"};
Object[][] rows = new Object[list.size()][6];
for(int i = 0; i < list.size(); i++){
rows[i][0] = list.get(i).getID();
rows[i][1] = list.get(i).getName();
rows[i][2] = list.get(i).getPrice();
rows[i][3] = list.get(i).getDesc();
rows[i][4] = list.get(i).getAvail();
if(list.get(i).getMyImage() != null){
ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getMyImage()).getImage()
.getScaledInstance(150, 75, Image.SCALE_SMOOTH) );
rows[i][5] = image;
}
else{
rows[i][4] = null;
}
}
Modell model = new Modell(rows, columnName);
table_item.setModel(model);
table_item.setRowHeight(85);
table_item.getColumnModel().getColumn(2).setPreferredWidth(45);
table_item.getColumnModel().getColumn(3).setPreferredWidth(140);
table_item.getColumnModel().getColumn(4).setPreferredWidth(45);
table_item.getColumnModel().getColumn(5).setPreferredWidth(140);
它在我的模型类中显示错误:
public Modell(Object[][] data, String[] columnName){
this.rows = data;
this.columns = columnName;
}
@Override
public Class getColumnClass(int column){
if (column == 6){
return Icon.class;
}
else{
return getValueAt(0, column).getClass();
}
}
/**
*
* @return
*/
@Override
public int getRowCount(){
return this.rows.length;
}
/**
*
* @return
*/
@Override
public int getColumnCount(){
return this.columns.length;
}
/**
*
* @param rowIndex
* @param columnIndex
* @return
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex){
return this.rows[rowIndex][columnIndex];
}
/**
*
* @param col
* @return
*/
@Override
public String getColumnName(int col){
return this.columns[col];
}
}
错误:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 0
at orderingmanagementsystem.Modell.getValueAt(Modell.java:63)
at orderingmanagementsystem.Modell.getColumnClass(Modell.java:33)
at javax.swing.JTable.getColumnClass(JTable.java:2698)
at javax.swing.JTable.getCellRenderer(JTable.java:5674)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:682)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at orderingmanagementsystem.Modell.getValueAt(Modell.java:63)
at orderingmanagementsystem.Modell.getColumnClass(Modell.java:33)
at javax.swing.JTable.getColumnClass(JTable.java:2698)
at javax.swing.JTable.getCellRenderer(JTable.java:5674)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:682)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent.paint(JComponent.java:1042)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1975)
at java.awt.Window.paint(Window.java:3904)
at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
答案 0 :(得分:0)
您撰写的for
循环
for(int i = 0; i < list.size(); i++){....}
将此更改为
for(int i = 0; i< list.size()-1;i++){.....}
我希望这会奏效。