我尝试使用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");
}
}
}
点击搜索按钮后将执行此方法。它将隐藏上一个表,然后替换为另一个表。然后我在表格中填充搜索结果。
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)
任何指南?提前谢谢。
答案 0 :(得分:2)
不确定哪一个是ViewEvents.java
中的第158行(因为你还没有提到),但堆栈跟踪和剩余代码告诉我ArrayIndexOutOfBounds
异常是因为你试图访问如下所示的列:
jTable.getColumnModel().getColumn(4).setMaxWidth(100); // Not sure which column is the issue
您在vector
中没有那么多列,即jTable.getColumnModel()
。您正在尝试访问超出矢量大小的元素。
出现此问题的原因/位置的确切问题可能有所不同,但这是您应该开始查看的地方。