MooHa
MooHa

Reputation: 849

JTable display list of events under one date

I want to post a question about something I wish to do particularly but have no idea how to approach this as I am new with JTables. This is what I have atm: This is what I have atm

But I would like to arrange the table like this:

enter image description here

So that under a particular date, all events that correspond to that date are shown rather than individually like have above.

Here are the related classed in question, I am not sure where and how to make the alternations to allow me to achieve the above.

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 is the object of the class Events which is just a bean.

Upvotes: 0

Views: 127

Answers (1)

trashgod
trashgod

Reputation: 205805

You may be able to simply setAutoCreateRowSorter(true). Addendum: Because Date implements Comaprable, ensure that your TableModel returns type Date.class for the date column, as shown here. See also How to Use Tables: Sorting and Filtering.

A more elaborate approach would be to use a tree-table such as Outline, shown here. The top level(s) would be dates, and the leaves would be events.

Upvotes: 1

Related Questions