package jdepend.framework.ui.graph; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jdepend.framework.ui.component.MultiLineTableCellRender; import jdepend.framework.ui.component.TableSorter; import jdepend.framework.ui.graph.model.TableData; import jdepend.framework.ui.util.JTableUtil; import jdepend.framework.util.BundleUtil; import jdepend.framework.util.MetricsFormat; public class CooperTable extends JTable { private JPopupMenu popupMenu = new JPopupMenu(); private List<Object> currentes; private DefaultTableModel model; public CooperTable(TableData data) { this(data, false); } public CooperTable(TableData data, final boolean editable) { model = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { return editable; } }; TableSorter sorter = new TableSorter(model); this.setModel(sorter); sorter.setTableHeader(this.getTableHeader()); JMenuItem saveAsItem = new JMenuItem(BundleUtil.getString(BundleUtil.Command_SaveAs)); saveAsItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JTableUtil.exportTableToExcel(CooperTable.this); } }); popupMenu.add(saveAsItem); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { final JTable table = (JTable) e.getSource(); currentes = new ArrayList<Object>(); for (int rowNumber : table.getSelectedRows()) { currentes.add(table.getValueAt(rowNumber, 0)); } } @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == 3) { popupMenu.show(e.getComponent(), e.getX(), e.getY()); } } }); int columnIndex = 0; int sortColumnIndex = -1; for (String columnName : data.getColumnNames()) { model.addColumn(columnName); if (data.getSortColName() != null && data.getSortColName().equals(columnName)) { sortColumnIndex = columnIndex; } columnIndex++; } if (data.getMinColName() != null) { this.getColumn(data.getMinColName()).setMaxWidth(0); this.getColumn(data.getMinColName()).setMinWidth(0); } this.refresh(data); if (sortColumnIndex != -1) { sorter.setSortingStatus(sortColumnIndex, data.getSortOperation()); } } public void refresh(TableData data) { model.setRowCount(0); Object[] rowData; Object itemData; int col; List<String> multiLineColNames = new ArrayList<String>(); for (int i = 0; i < data.getRows(); i++) { col = 0; rowData = new Object[data.getColumnNames().size()]; for (String columnName : data.getColumnNames()) { itemData = data.getColumnValue(columnName, i); if (itemData instanceof Float) { itemData = MetricsFormat.toFormattedMetrics((Float) itemData); } else if (itemData instanceof String) { if (((String) itemData).indexOf("\n") != -1) { multiLineColNames.add(columnName); } } rowData[col++] = itemData; } model.addRow(rowData); } for (String multiLineColName : multiLineColNames) { this.getColumn(multiLineColName).setCellRenderer(new MultiLineTableCellRender()); } } public JPopupMenu getPopupMenu() { return popupMenu; } public List<Object> getCurrentes() { return currentes; } }