建立一个 Derby 日历,第 3 部分: 使用事务和锁定(下)
2010-04-19 00:00:00 来源:WEB开发网注意,首先创建的是 EventTableModel 而不是表格本身,然后调用 reloadTableMode() 方法填充它。该方法改变鼠标的形状,因此用户知道发生了什么事情,但更重要的是,它调用模型的 reloadEventsForDate() 方法来设置单元格中的数据。
建立 eventModel 后将其关联到一个 JTable 并显示该表格(参见 图 5)。
图 5. 添加表格
查看原图(大图)
但是,当用户单击某个日期时,仍然需要更新表格。
刷新事件列表
建立表格后,还要保证它显示正确的数据。换句话说,如果用户在日历选择器中选择了新的一天,需要从数据库请求适当的数据并显示在表格中(参见 清单 26)。(看到 EventTableMode 的方便之处了吗?)
清单 26. 刷新表
...
private JComponent layoutLeftPanel() {
...
JButton addButton = new JButton("Add Event");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
EventClass.add(CalendarFrame.this.conn, titleBox.getText(),
descriptionBox.getText(), reminderBox.getText(),
dateChooser.getDate());
CalendarFrame.this.calendarPicker
.setDate(dateChooser.getDate());
reloadTableModel();
}
});
editPanel.add(addButton, cons);
viewSplitPane.setBottomComponent(editPanel);
return viewSplitPane;
}
private JPanel layoutRightPanel() {
...
this.eventModel = new EventTableModel();
reloadTableModel();
final JTable eventTable = new JTable(this.eventModel);
tablePanel.add(new JScrollPane(eventTable), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
JButton refreshButton = new JButton("Refresh");
refreshButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reloadTableModel();
}
});
buttonPanel.add(refreshButton);
tablePanel.add(buttonPanel, BorderLayout.SOUTH);
return tablePanel;
}
private JComponent layoutMenuBar() {
JMenuBar menuBar = new JMenuBar();
return menuBar;
}
public static void main(String args[]) {
...
}
public void propertyChange(PropertyChangeEvent evt) {
reloadTableModel();
}
private void reloadTableModel() {
SwingUtilities.invokeLater(new Runnable() {
...
更多精彩
赞助商链接