package jeql.monitor.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.SystemColor;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import jeql.monitor.MonitorModel;
public class MonitorItemsPanel extends JPanel
{
MonitorModel monitorModel;
private ItemTable table = new ItemTable();
public MonitorItemsPanel()
{
super();
initUI();
table.setModel(new MonitorItemsTableModel());
table.initTable();
}
private static final Font STATUS_FONT = new Font("SanSerif", Font.BOLD, 12);
public void initUI()
{
setMinimumSize(new Dimension(400, 50));
setPreferredSize(new Dimension(900, 300));
setBackground(SystemColor.control);
this.setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().setBackground(SystemColor.control);
scrollPane.getViewport().add(table);
this.add(scrollPane, BorderLayout.CENTER);
}
public void setModel(MonitorModel model)
{
//table.setModel(new MonitorItemsTableModel());
table.initTable();
this.monitorModel = model;
((MonitorItemsTableModel) table.getModel()).setModel(model);
}
public void update()
{
((MonitorItemsTableModel) table.getModel()).update();
}
public void end()
{
table.end();
((MonitorItemsTableModel) table.getModel()).update();
}
}
class ItemTable extends JTable
{
private boolean isEnded = false;
public ItemTable()
{
setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
}
public void end()
{
isEnded = true;
}
private static final int[] COL_WIDTH = new int[] { 70, 70, 70, 300, 50 };
public void initTable()
{
isEnded = false;
getColumnModel().setColumnMargin(4);
for (int i = 0; i < 5; i++) {
TableColumn col = getColumnModel().getColumn(i);
// don't set width for last column, to allow it to stretch
if (i < 4) {
col.setPreferredWidth(COL_WIDTH[i]);
col.setMaxWidth(COL_WIDTH[i]);
}
col.setHeaderRenderer(new MonitorItemTableHeaderRenderer(getTableHeader()
.getDefaultRenderer()));
}
/*
JComponent hdrRenderer = (JComponent) getTableHeader().getDefaultRenderer();
hdrRenderer.setBackground(SystemColor.control);
hdrRenderer.setForeground(SystemColor.control);
*/
}
private final Color ACTIVE_ROW_CLR = new Color(210, 230, 230);
public TableCellRenderer getCellRenderer(int row, int column)
{
//System.out.println(" getCellRenderer " + row + ", " + column);
JComponent renderer = (JComponent) super.getCellRenderer(row, column);
if (true) {
boolean isActive = ((MonitorItemsTableModel) getModel()).getModel()
.getItem(row).isActive();
Color bkClr = isActive ? ACTIVE_ROW_CLR : Color.white;
if (isEnded) bkClr = AppColor.BACKGROUND;
renderer.setBackground(bkClr);
}
return (TableCellRenderer) renderer;
}
}
class MonitorItemTableHeaderRenderer implements TableCellRenderer {
TableCellRenderer originalRenderer;
MonitorItemTableHeaderRenderer(TableCellRenderer originalRenderer)
{
this.originalRenderer = originalRenderer;
}
// This method is called each time a column header
// using this renderer needs to be rendered.
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
JLabel label = (JLabel) originalRenderer
.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, col);
// Configure the component with the specified value
label.setText(value.toString());
// Set tool tip if desired
//setToolTipText((String)value);
label.setBackground(SystemColor.control);
//setForeground(SystemColor.control);
// Since the renderer is a component, return itself
return label;
}
// The following methods override the defaults for performance reasons
public void validate() {}
public void revalidate() {}
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {}
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
}