AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:2

时间:2015-01-14 10:22:17

标签: java swing jtable indexoutofboundsexception tablemodel

运行代码时出错,你能帮我解决问题吗?

当我在kindnummer JTextField中写1时,这有效但当我将值更改为2或3时,我会显示错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2

我的TableModel班级:

public class listtable extends AbstractTableModel{
       BusinessDelegate bd= new BusinessDelegate();
       JTextField t= new JTextField();

        private final String[] entetes = { "Name", "Vorname", "Geburtsdatum", "Geschlecht" };
       String rr=t.getText();
        private    List<Kiwikinder> cc =  bd.getRemoteEjb().getKiwidinderbyNummerFindbyId(1);
    public listtable(List<Kiwikinder> cc) {
              this.cc = new ArrayList<>(cc);
          }

      public Class getColumnClass(int c) {
          return getValueAt(0, c).getClass();
      } 
    @Override
    public int getColumnCount() {

        // TODO Implement this method
        return entetes.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        // TODO Implement this method
        return entetes [columnIndex];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Kiwikinder kk= cc.get(rowIndex);
        Object value = null;
        switch(columnIndex) {
        case 0:
            value= kk.getName();
            break;
        case 1:
        value=kk.getVorname();
        break;
        case 2:
        value= kk.getGeburtsdatum();
        break;
        case 3:
            value= kk.getGeschlecht();
            break;

        }
              return  value;
          }

    @Override
    public boolean isCellEditable(int i, int i2) {
        // TODO Implement this method
        return true;
    }

    @Override
    public void setValueAt(Object object, int i, int i2) {
       Kiwikinder hh=cc.get(i);
            if (i2==0)
           hh.setName((String)object);
            else             if (i2==1)
           hh.setVorname((String)object);
            else    if (i2==2)
                hh.setGeburtsdatum((Date)object);
                if (i2==3)
                hh.setGeschlecht((String)object);
            fireTableCellUpdated(i,i2);
    }

    @Override
    public int getRowCount() {
         return cc.size();
    }
    public void updateRow(int index,String[] values)
            {
                for (int i = 0 ; i < values.length ; i++)
                {
                    setValueAt(values[i],index,i);
                }
            }
}

我的第二课:

public class tabbedPane extends JFrame implements ActionListener {
    BusinessDelegate businessDelegate = new BusinessDelegate();
    private JTabbedPane tabbedPane;
    private JPanel panel1, panel2, panel3; 
    private JButton kindsuchen;
    private JTextField   kindernummer;
    Kiwiantraagsteller ant = new Kiwiantraagsteller();
    InputVerifier verifier = new Verifier();
    private listtable model;
   private JTable table;     
    public tabbedPane() {

        setTitle("Kindergeld");
        setSize(700, 800);
        setBackground(Color.gray);   
        kindsuchen = new JButton("suchen");         
       JPanel topPanel = new JPanel();
        topPanel.setLayout(new BorderLayout());
        getContentPane().add(topPanel);

        // Create the tab pages
        createPage1();
        createPage2();
        createPage3();


        // Create a tabbed pane
        tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Neuer Antragsteller stellen", panel1);
        tabbedPane.addTab("Neues Kind stellen ", panel2);
        tabbedPane.addTab("Suchen Kindergeldfall", panel3);
        topPanel.add(tabbedPane, BorderLayout.CENTER);

    }

    public void createPage1() {
         panel1 = new JPanel()
        panel1.setLayout(null);

    }

    public void createPage2() {
         panel2 = new JPanel();
        panel2.setLayout(null);

    }

    public void createPage3() {
        kindernummer = new JTextField();
        panel3 = new JPanel();
        panel3.setLayout(null);
        JLabel label12 = new JLabel("Kindergeldnummer:");
        label12.setBounds(10, 20, 150, 20);
        panel3.add(label12);
    table= new JTable();
        kindernummer.setBounds(150, 20, 200, 20);
        kindsuchen.addActionListener(this);
        panel3.add(kindernummer);
        kindsuchen.setBounds(350, 40, 90, 25);
        panel3.add(kindsuchen);
    }

    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        BusinessDelegate businessDelegate = new BusinessDelegate();      
        if (actionEvent.getSource() == kindsuchen) {

            String tr = kindernummer.getText();
         Integer  g = Integer.valueOf(tr);
           List <Kiwikinder> cc = businessDelegate.getRemoteEjb().getKiwidinderbyNummerFindbyId(g);

         model = new listtable(cc);               table = new JTable(model);
           table.setModel(model);
            table.setBounds(10, 50, 200, 20);
            JScrollPane tableContainer = new JScrollPane(table);
            tableContainer.setBounds(10, 80, 600, 150);
            panel3.add(tableContainer, BorderLayout.CENTER);
           table.setAutoCreateRowSorter(true);
          }

        table.getModel().addTableModelListener(new TableModelListener() {
                    @Override
                    public void tableChanged(TableModelEvent e) {
                    }
               });    
        }

    public static void main(String args[]) {
        // Create an instance of the test application
        tabbedPane bb = new tabbedPane();
        bb.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:0)

问题是,您的数组太小,程序试图在String数组中的不存在的位置写入。你有机会解决你的问题:

1。)选择一个更大的字符串数组。

2.)选择ArrayList而不是String Array。您可以像这样初始化ArrayList:

ArrayList<String> yourArrayList = new ArrayList<String>();