package net.combase.desktopcrm.swing; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Point; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.TableCellRenderer; import net.combase.desktopcrm.data.CrmManager; import net.combase.desktopcrm.domain.Lead; import net.combase.desktopcrm.domain.Task; public class TaskTablePanel extends JPanel { /** * */ private static final long serialVersionUID = -6149463410211475900L; private JTable table; private TaskTableModel model; /** * Create the panel. */ public TaskTablePanel() { init(); UiUtil.runAndRepeat(new Runnable() { @Override public void run() { final List<Task> updatedList = CrmManager.getTaskList(); System.out.println(updatedList); updateTaskList(updatedList); } }, 500, 120000); } public TaskTablePanel(List<Task> taskList) { init(); updateTaskList(taskList); } private void init() { setLayout(new BorderLayout(0, 0)); model = new TaskTableModel(new ArrayList<Task>()); table = new JTable(model); // enable button clicks table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int column = table.getColumnModel().getColumnIndexAtX(e.getX()); int row = e.getY() / table.getRowHeight(); if (row < table.getRowCount() && row >= 0 && column < table.getColumnCount() && column >= 0) { Object value = table.getValueAt(row, column); if (value instanceof JButton) { ((JButton) value).doClick(); } } } }); table.setDefaultRenderer(JButton.class, new TableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof JButton) { return (JButton) value; } return new JLabel(); } }); table.getColumnModel().getColumn(1).setMaxWidth(140); table.getColumnModel().getColumn(1).setMinWidth(140); table.getColumnModel().getColumn(2).setMaxWidth(30); table.getColumnModel().getColumn(3).setMaxWidth(30); table.getColumnModel().getColumn(4).setMaxWidth(30); table.getColumnModel().getColumn(5).setMaxWidth(30); table.getColumnModel().getColumn(6).setMaxWidth(30); table.getColumnModel().getColumn(7).setMaxWidth(30); table.getColumnModel().getColumn(8).setMaxWidth(30); table.setRowHeight(30); add(table.getTableHeader(), BorderLayout.NORTH); add(new JScrollPane(table), BorderLayout.CENTER); table.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent me) { JTable table = (JTable) me.getSource(); if (me.getClickCount() == 2) { Point p = me.getPoint(); int row = table.rowAtPoint(p); Task task = model.getTask(row); String title = null; String parentId = task.getParentId(); switch (task.getParentType()) { case "Cases": title = CrmManager.getCase(parentId).getTitle(); break; case "Leads": Lead lead = CrmManager.getLead(parentId); title = lead.getTitle(); title += " - " + lead.getAccountName(); break; case "Contacts": title = CrmManager.getContact(parentId).getTitle(); break; case "Accounts": break; case "Opportunities": title = CrmManager.getOpprtunity(parentId).getTitle(); break; default: break; } StringSelection stringSelection = new StringSelection(title); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(stringSelection, null); } } }); } public void updateTaskList(final List<Task> updatedList) { int r = table.getSelectedRow(); Task t = null; if (r >= 0) t = model.getTask(r); final String oldTaskId = (t != null) ? t.getId() : null; if (updatedList != null) SwingUtilities.invokeLater(new Runnable() { @Override public void run() { model.update(updatedList); if (oldTaskId != null) { int i = 0; for (Task task : updatedList) { if (task.getId().equals(oldTaskId)) table.setRowSelectionInterval(i, i); i++; } } } }); } }