: , refreshTable , EDT, - , Swing, , EDT.
( , ), , refreshTable
public void invokeRefreshTable(final OrderTableModel model) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
refreshTable(model)
}
});
}
, , , , , , , - . ( ) , tableModel: . , TableModel, - :
public static class OrderTableModel extends AbstractTableModel {
List<Order> orders = new ArrayList<Order>();
Class<?>[] columnTypes = new Class[] { Integer.class,
Timestamp.class, BigDecimal.class, BigDecimal.class, BigDecimal.class,
Object.class };
public void setOrders(Customer customer) {
setOrders(customer != null ? customer.getOrderHistory() : null);
}
public void setOrders(Map<?, ?> orderHistory) {
clear();
if (orderHistory == null) return;
for (Entry<?, ?> orderEntry: orderHistory) {
orders.add(orderEntry.getValue());
}
fireTableRowsInserted(0, orders.size() - 1);
}
public void clear() {
int rowCount = orders.size();
orders.clear();
if (rowCount > 0 ) {
fireTableRowsDeleted(0, rowCount -1);
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0: return orders.get(rowIndex).getOrderID();
default:
break;
}
return null;
}
@Override
public int getRowCount() {
return orders.size();
}
@Override
public int getColumnCount() {
return columnTypes.length;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnTypes[columnIndex];
}
}
OrderTableModel model = new OrderTableModel()
JTable table = new JTable(model);
table.setDefaultRenderer(BigDecimal.class, new BigDecimalRenderer());
table.setDefaultRenderer(Timestamp.class, new TimeStampRenderer());
table.getColumnModel().getColumn(0).setPreferredSize(...)
....
public void refreshTable(OrderTableModel model) {
model.setCustomer(customManager.getCustomer(phoneNumber))
}
invokeRefreshTable(model);
:
- : - cellRenderers
- : Customer, orderHistory
share