java吧 关注:1,302,236贴子:12,855,749
  • 7回复贴,共1

这个是哪里出错了,求分析

只看楼主收藏回复

做了个表格查询Array数组,删除最后一个元素,再点击表格时出现了以下异常,我知道是数组下标越界,但是找不到代码哪里逻辑出问题了。下面贴关键代码。

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 65 >= 65
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor.stopCellEditing(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(Unknown Source)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


IP属地:江苏1楼2014-07-12 13:22回复
    MyTable.java
    ===============================
    package pages;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import personManage.Person;
    import personManage.SavedData;
    public class MyTable {
    JTable table = new JTable();
    SavedData sd;//保存的数据
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    String[] tableHeads = { "编号", "姓名", "年龄", "性别", "工资","部门","职务","联系方式","删除","详细" };
    JScrollPane sp = new JScrollPane(table);
    public JScrollPane getSp() {
    return sp;
    }
    public void setSp(JScrollPane sp) {
    this.sp = sp;
    }
    private MainPage mp;
    public MyTable() {
    tableModel.setColumnIdentifiers(tableHeads);
    table.getColumn("详细").setCellRenderer(new ButtonRenderer());
    table.getColumn("详细").setCellEditor(new ButtonEditor(new JCheckBox()));
    table.getColumn("详细").setMaxWidth(30);
    table.getColumn("详细").setMinWidth(30);
    table.getColumn("删除").setCellRenderer(new ButtonRenderer());
    table.getColumn("删除").setCellEditor(new ButtonEditor(new JCheckBox()));
    table.getColumn("删除").setMaxWidth(48);
    table.getColumn("删除").setMinWidth(48);
    sd=new SavedData(this);
    table.removeAll();
    }
    public DefaultTableModel getTableModel() {
    return tableModel;
    }
    public void setTableModel(DefaultTableModel tableModel) {
    this.tableModel = tableModel;
    }
    public void addRow(Person person) {
    String[] str = new String[10];
    str[0] = String.valueOf(person.getNo());
    str[1] = person.getName();
    str[2] = String.valueOf(person.getAge());
    str[3] = String.valueOf(person.getSex());
    str[4] = String.valueOf(person.getSalary());
    str[5] = person.getDepartment();
    str[6]=person.getPosition();
    str[7] = person.getPhone();
    str[8]="删";
    str[9]="…";
    // 添加数据到表格
    tableModel.addRow(str);
    }
    JButton btn_add = new JButton("添加");
    JTextField[] tf_ps = new JTextField[6];
    JPanel jpn_add = new JPanel();
    public class ButtonRenderer extends JButton implements TableCellRenderer {
    public ButtonRenderer() {
    setOpaque(true);
    }
    @Override
    public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row,
    int column) {
    setText((value == null) ? "" : value.toString());
    return this;
    }
    }
    public class ButtonEditor extends DefaultCellEditor {
    protected JButton button;
    public ButtonEditor(JCheckBox checkBox) {
    super(checkBox);
    button = new JButton();
    button.setOpaque(true);
    button.addActionListener(new listener.TableListener(MyTable.this));
    }
    @Override
    public Component getTableCellEditorComponent(JTable table1,
    Object value, boolean isSelected, int row, int column) {
    if (isSelected) {
    button.setForeground(table.getSelectionForeground());
    button.setBackground(table.getSelectionBackground());
    } else {
    button.setForeground(table.getForeground());
    button.setBackground(table.getBackground());
    }
    button.setText(table1.getValueAt(row, column).toString());
    return button;
    }
    @Override
    public Object getCellEditorValue(){
    return button.getText();
    }
    }
    public MainPage getMp() {
    return mp;
    }
    public void setMp(MainPage mp) {
    this.mp = mp;
    }
    public JTable getTable() {
    return table;
    }
    public void setTable(JTable table) {
    this.table = table;
    }
    public SavedData getSd() {
    return sd;
    }
    public void setSd(SavedData sd) {
    this.sd = sd;
    }
    }


    IP属地:江苏2楼2014-07-12 13:23
    回复
      2026-05-03 12:10:27
      广告
      不感兴趣
      开通SVIP免广告
      TableListener.java
      ==============================
      package listener;
      import java.awt.event.*;
      import javax.swing.JTable;
      import pages.MyTable;
      import personManage.Person;
      import personManage.PersonOperate;
      public class TableListener implements ActionListener{
      private MyTable mytable;
      public TableListener(MyTable mytable){
      this.mytable=mytable;
      }
      @Override
      public void actionPerformed(ActionEvent e) {
      System.out.println(mytable.getTable().getSelectedColumn() + " and "+ mytable.getTable().getSelectedRow());
      if(mytable.getTable().getSelectedColumn()==8){
      System.out.println("删除");
      new PersonOperate(mytable).delPerson(mytable.getTable().getSelectedRow());
      }else if(mytable.getTable().getSelectedColumn()==9){
      System.out.println("详细资料");
      new pages.PersonnelPage(mytable);
      }
      //System.out.println("点击后长度"+mytable.getMp().getmyTable().getSd().getArr().size());
      }
      }


      IP属地:江苏4楼2014-07-12 13:24
      回复
        TableOperate.java
        ==================================
        package personManage;
        import pages.MyTable;
        public class PersonOperate {
        private int selectRow;
        private MyTable mytable;
        public PersonOperate(MyTable mytable){
        this.mytable=mytable;
        }
        public void addPerson(Person p){//增
        mytable.addRow(p);
        mytable.getSd().addArr(p);
        }
        public void delPerson(int selectRow){//删
        mytable.getMp().getMyTable().getSd().getArr().remove(selectRow);
        mytable.getTableModel().removeRow(selectRow);
        }public void modifyPerson(){//改
        }public void findPerson(){//查
        }
        }


        IP属地:江苏5楼2014-07-12 13:26
        回复
          求解救。


          IP属地:江苏6楼2014-07-12 13:26
          回复
            太多 懒得看 selectRow - 1 试试


            IP属地:广东7楼2014-07-12 16:43
            回复
              太长不看!


              IP属地:广东8楼2014-07-12 16:44
              回复
                太长不看,自己调试去


                9楼2014-07-12 17:13
                回复