0

特にやりたいことについて質問を投稿したいのですが、JTables. これは私が持っているものです: これは私が持っているものです

しかし、テーブルを次のように配置したいと思います。

ここに画像の説明を入力

そのため、特定の日付の下で、上記のように個別に表示されるのではなく、その日付に対応するすべてのイベントが表示されます。

問題の関連クラスは次のとおりです。上記を達成できるようにするために、どこでどのように変更を行うべきかわかりません。

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

4

1 に答える 1

1

簡単にできるかもしれませんsetAutoCreateRowSorter(true)。補遺:をDate実装しているため、ここに示すように、日付列の戻り値の型をComaprable確認してください。テーブルの使用方法: ソートとフィルタリングも参照してください。TableModelDate.class

より精巧なアプローチは、ここOutlineに示す のようなツリー テーブルを使用することです。最上位は日付で、葉はイベントです。

于 2013-01-24T10:48:58.577 に答える