2013-01-23 22 views
-1

我試着使用的Java Swing做一個搜索系統:ArrayOutOfBoundException當結果填入JTable中

public void search(ActionEvent e){ 
    String textEntered=getJTextField_searchField().getText(); 
    if(textEntered.equals("")){ 
     JOptionPane.showMessageDialog(null,"Please enter a word"); 
    } 
    else{ 
     kioskViewevents viewEvents=new kioskViewevents(textEntered); 
     if(viewEvents.searchContent() == true){ 
      getJScrollPane().setVisible(false); 
      getJScrollPane_search(); 
     } 
     else{ 
      JOptionPane.showMessageDialog(null,"No result found"); 
     } 


    } 
} 

此方法將被執行後,搜索按鈕是點擊。它將隱藏前一個表格,然後用另一個表格替換。然後我在表格中填充搜索結果。

public void SetUpJTable_search(){ 
    DefaultTableModel tableModel = (DefaultTableModel) jTableSearch.getModel(); 

    String[] data = new String[5]; 
    db.setUp("IT Innovation Project"); 
    String sql = "Select event_ID,event_Price,event_Title,event_Time,event_Date FROM crossEvent WHERE event_Title='"+ textEntered +"'"; 

    ResultSet resultSet = null; 
    resultSet = db.readRequest(sql); 
    try { 
     while (resultSet.next()) { 
      data[0] = resultSet.getString("event_ID"); 
      data[1] = resultSet.getString("event_Price"); 
      data[2] = resultSet.getString("event_Title"); 
      data[3] = resultSet.getString("event_Time"); 
      data[4] = resultSet.getString("event_Date"); 
      tableModel.addRow(data); 
     } 
     resultSet.close(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 

} 

設置我的搜索表:

private JTable getJTable_search() { 
    String header[] = { "Event ID", "Price", "Title","Time","Date"}; 
    DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel(); 
    tableModel.setColumnIdentifiers(header); 
    jTableSearch.setAutoCreateColumnsFromModel(false); 
    jTableSearch.getColumnModel().getColumn(0).setMinWidth(100); 
    jTableSearch.getColumnModel().getColumn(0).setMaxWidth(100); 

    jTableSearch.getColumnModel().getColumn(1).setMinWidth(200); 
    jTableSearch.getColumnModel().getColumn(1).setMaxWidth(300); 

    jTableSearch.getColumnModel().getColumn(2).setMinWidth(300); 
    jTableSearch.getColumnModel().getColumn(2).setMaxWidth(400); 

    jTableSearch.getColumnModel().getColumn(3).setMinWidth(100); 
    jTableSearch.getColumnModel().getColumn(3).setMaxWidth(100); 

    jTableSearch.getColumnModel().getColumn(4).setMinWidth(100); 
    jTableSearch.getColumnModel().getColumn(4).setMaxWidth(100); 


    jTableSearch.getTableHeader().setFont(new Font("Dialog", Font.PLAIN, 20)); 
    jTableSearch.getTableHeader().setForeground(Color.white); 
    jTableSearch.getTableHeader().setBackground(new Color(102, 102, 102)); 
    jTableSearch.setRowHeight(50); 
    jTableSearch.setBounds(new Rectangle(97, 157, 800, 450)); 
    jTableSearch.setFont(new Font("Dialog", Font.PLAIN, 18)); 

    return jTableSearch; 
} 

我的滾動窗格中搜索表:

private JScrollPane getJScrollPane_search(){ 
    if (jScrollPane_search == null) { 
     jScrollPane_search = new JScrollPane(); 
     jScrollPane_search.setBounds(new Rectangle(75, 180, 800, 450)); 
     jScrollPane_search.setViewportView(getJTable_search()); 
    } 
    SetUpJTable_search(); 
    return jScrollPane_search; 
} 

這整個代碼的垃圾是填充表與數據庫中的數據存在執行搜索前:

private JTable getJTable() { 
    String header[] = { "Event ID", "Price", "Title","Time","Date"}; 
    DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel(); 
    tableModel.setColumnIdentifiers(header); 
    // Hide Topic ID 
    jTable.setAutoCreateColumnsFromModel(false); 
    jTable.getColumnModel().getColumn(0).setMinWidth(100); 
    jTable.getColumnModel().getColumn(0).setMaxWidth(100); 

    jTable.getColumnModel().getColumn(1).setMinWidth(200); 
    jTable.getColumnModel().getColumn(1).setMaxWidth(300); 

    jTable.getColumnModel().getColumn(2).setMinWidth(300); 
    jTable.getColumnModel().getColumn(2).setMaxWidth(400); 

    jTable.getColumnModel().getColumn(3).setMinWidth(100); 
    jTable.getColumnModel().getColumn(3).setMaxWidth(100); 

    jTable.getColumnModel().getColumn(4).setMinWidth(100); 
    jTable.getColumnModel().getColumn(4).setMaxWidth(100); 

    jTable.getTableHeader().setFont(new Font("Dialog", Font.PLAIN, 20)); 
    jTable.getTableHeader().setForeground(Color.white); 
    jTable.getTableHeader().setBackground(new Color(102, 102, 102)); 
    jTable.setRowHeight(50); 
    jTable.setBounds(new Rectangle(97, 157, 800, 450)); 
    jTable.setFont(new Font("Dialog", Font.PLAIN, 18)); 

    return jTable; 
} 

    public void SetUpJTable() { 
    DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel(); 

    String[] data = new String[5]; 
    db.setUp("IT Innovation Project"); 
    String sql = "Select event_ID,event_Price,event_Title,event_Time,event_Date FROM crossEvent"; 

    ResultSet resultSet = null; 

    resultSet = db.readRequest(sql); 
    tableModel.getDataVector().removeAllElements(); 
    tableModel.fireTableDataChanged(); 
    try { 
     while (resultSet.next()) { 
      data[0] = resultSet.getString("event_ID"); 
      data[1] = resultSet.getString("event_Price"); 
      data[2] = resultSet.getString("event_Title"); 
      data[3] = resultSet.getString("event_Time"); 
      data[4] = resultSet.getString("event_Date"); 

      tableModel.addRow(data); 
     } 
     resultSet.close(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

但是,我收到了一條錯誤消息:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 
at java.util.Vector.elementAt(Unknown Source) 
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source) 
at kioskViewevents.ui.ViewEventsUI.getJTable_search(ViewEventsUI.java:158) 
at kioskViewevents.ui.ViewEventsUI.getJScrollPane_search(ViewEventsUI.java:201) 
at kioskViewevents.ui.ViewEventsUI.search(ViewEventsUI.java:330) 
at kioskViewevents.ui.ViewEventsUI$4.actionPerformed(ViewEventsUI.java:315) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(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.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$400(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(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) 

任何嚮導?提前致謝。

+3

請發佈堆棧跟蹤,因爲您將確切知道發生異常的位置。確切的線其實 –

+1

請。完整的堆棧跟蹤。 – Azodious

+2

請添加'getJTable_search(ViewEventsUI.java:158)'的代碼' – Swapnil

回答

2

不知道哪一個是ViewEvents.java線158(因爲你沒有提到它),但堆棧跟蹤和其餘代碼告訴我,ArrayIndexOutOfBounds例外是因爲你試圖訪問一個列象下面這樣:

jTable.getColumnModel().getColumn(4).setMaxWidth(100); // Not sure which column is the issue 

而且您在vectorjTable.getColumnModel()中沒有那麼多列。您嘗試訪問超出矢量大小的元素。

發生此問題的原因/確切位置可能有所不同,但這是您應該開始查看的位置。

+0

第158行:jTableSearch.getColumnModel()。getColumn(0).setMinWidth(100);但我想我從數據庫檢索5個數據,所以我需要在表中設置5列的寬度? – Newbies

+0

在這種情況下,您的表模型沒有任何列。如果您在JTable上使用'getColumnCount()'進行檢查,它應該返回0. – Swapnil

+0

那麼有什麼方法可以解決這個問題嗎?因爲這些代碼完美適合我的其他表格顯示論壇的主題內容 – Newbies