-1

I tried to do a search system using java swing :

    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");
        }


    }
}

This method will be perform after search button is on click. It will hide the previous table then replace with another table. Then I populate the search results inside the table.

    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);
    }

}

I set up my Search table :

    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;
}

My Scroll Pane for search table :

    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;
}

This whole junk of codes is to populate the table with data existing in database before performing 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);
    }
}

However, I got an error message which is :

    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)

Any guides? Thanks in advance.

Roman C
  • 49,761
  • 33
  • 66
  • 176
Newbies
  • 13
  • 5

1 Answers1

2

Not sure which one is the line 158 in ViewEvents.java (as you haven't mentioned it), but the stacktrace and remaining code tells me that the ArrayIndexOutOfBounds exception is because you're trying to access a column like below:

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

And you don't have those many columns in the vector i.e. jTable.getColumnModel(). You're trying to access an element beyond the size of the vector.

The exact problem on why/where this issue occurs could be different, but this is where you should start looking at.

Swapnil
  • 8,201
  • 4
  • 38
  • 57
  • Line 158 : jTableSearch.getColumnModel().getColumn(0).setMinWidth(100); But I thought I retrieve 5 data from database so I need to set the width for 5 column in table? – Newbies Jan 23 '13 at 12:23
  • In that case, your table model doesn't have any columns. If you check with `getColumnCount()` on your JTable, it should return 0. – Swapnil Jan 23 '13 at 12:26
  • So is there any way to fix this? Because these codes work perfectly for my other tables to display the thread content of forum – Newbies Jan 23 '13 at 12:27
  • There is. You need to set up your IDE and debugger. I would start with checking the code piece where I create the columns. – Swapnil Jan 23 '13 at 12:34
  • Now there is no errors anymore. But the table which after users perform search does not showing. Is it possible to do in such way : I display all data in database using first table. After user perform search, i use the where clause in second table and hide the first table in java? – Newbies Jan 23 '13 at 13:24