JTable显示一个日期下的事件列表

时间:2013-01-24 10:41:26

标签: java sql swing jtable tablemodel

我想发布一个关于我希望做的事情的问题,但不知道如何解决这个问题,因为我是JTables的新手。 这就是我的主题: This is what I have atm

但我想安排这样的表格:

enter image description here

因此,在特定日期,所有与该日期对应的事件都会显示,而不是像上面那样单独显示。

以下是相关的相关分类,我不知道在何处以及如何进行更改以允许我实现上述目标。

public class DbUtils {
    public static TableModel resultSetToTableModel(ResultSet rs) {

        try {
            ResultSetMetaData metaData = rs.getMetaData();
            int numberOfColumns = metaData.getColumnCount();
            Vector columnNames = new Vector();

            for (int column=0; column < numberOfColumns; column++) {
                columnNames.addElement(metaData.getColumnLabel(column + 1));              
            }
            Vector rows = new Vector(); 
            while(rs.next()) {
            Vector newRow = new Vector(); 
            for (int i =1; i <= numberOfColumns; i++) {
            newRow.addElement(rs.getObject(i));
            }
            rows.addElement(newRow);
            } 
            return new DefaultTableModel(rows,columnNames);

           }  catch (Exception e) {
              e.printStackTrace();      
             return null; 
        }



    }
}



public class EventModel {

public TableModel getTableData() {
     TableModel model=null;
    try {
        String sql = "SELECT eventID as 'Event ID', date as 'Date',eventName as 'Name', time as 'Start Time' FROM Event";
        pst = conn.prepareStatement(sql); 
        rs = pst.executeQuery();
        model = (DbUtils.resultSetToTableModel(rs));
        }
    catch(SQLException e){
        e.printStackTrace();
    }
   finally {
        try {rs.close(); pst.close();}
        catch(SQLException e){}     }                                 
       return model; 
}


public Events getEvent(String tableClick) {
try {
        pst = conn.prepareStatement("SELECT * FROM Event WHERE eventID='"+tableClick+"' ");
        rs = pst.executeQuery();
        while(rs.next()){      
        e.setEventName(rs.getString(2));
        e.setEventDate(rs.getString(3));
        e.setEventTime(rs.getString(4));
        e.setEventVenue(rs.getString(5));
        e.setEventDetail(rs.getString(6));
        e.setEventOpportunity(rs.getString(7));
        e.setEventMoreDetails(rs.getString(8));
        e.setEndTime(rs.getString(9));
       }
    } 
    catch(SQLException ex){
    ex.printStackTrace();
    } finally {
            try {
                rs.close();
                pst.close();
            } catch (Exception e) {
            }
        }  
    return e;
} //end getEvent



}



public class EventController {
private KeyAdapter keyAdapter = new KeyAdapter() {
        @Override
        public void keyReleased(java.awt.event.KeyEvent e) {
            if((e.getKeyCode()==KeyEvent.VK_UP) || (e.getKeyCode()==KeyEvent.VK_DOWN)) {
             changeEvent();           
        }
    }
  };  

  public void changeEvent() {
      int rowSelected = view.tableEvent.getSelectedRow();
      tableClick = view.tableEvent.getModel().getValueAt(view.tableEvent.convertRowIndexToModel(rowSelected), 0).toString();
      events = model.getEvent(tableClick); //tell model to change its state based on user input on views 
      view.changeDisplay(events);

  }

}



public class EventView {
public void changeDisplay(Events e) {
       evTitle.setText(""+e.getEventName());
       evWhen.setText("When: "+ e.getEventDate());
       evWhere.setText("Where: "+ e.getEventVenue());
       evDescription.setText(""+ e.getEventDetail());
       evOpportunity.setText(""+ e.getEventOpportunity());
       evMoreDet.setText(""+ e.getEventMoreDetails());
       endTime.setText("End Time: "+e.getEndTime());
   }

}

e是类Events的对象,它只是bean

1 个答案:

答案 0 :(得分:1)

您可能只需setAutoCreateRowSorter(true)。附录:由于Date实施Comaprable,请确保TableModel为日期列返回Date.class类型,如here所示。另请参阅How to Use Tables: Sorting and Filtering

更精细的方法是使用Outline等树表,显示here。顶级是日期,叶子是事件。