package aliview.primer; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Enumeration; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import org.apache.log4j.Logger; import aliview.AliViewWindow; import aliview.gui.AppIcons; public class PrimerResultsFrame extends JFrame { private static final Logger logger = Logger.getLogger(PrimerResultsFrame.class); private static final int MAX_NUMBER_OF_PRIMERS_REPORTED = 1000; JPanel mainPanel = new JPanel(); private final AliViewWindow aliViewWindow; JTable mainTable; PrimerDetailFrame primerDetailFrame; private ArrayList<Primer> primerResult; public PrimerResultsFrame(ArrayList<Primer> primRes,AliViewWindow aliViewWin){ this.aliViewWindow = aliViewWin; this.primerResult = primRes; DefaultTableModel tm = new DefaultTableModel(PrimerResultTableRow.getColumnHeaders().toArray(),0); mainTable = new JTable(tm); mainTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mainTable.setRowHeight(44); //mainTable.setDefaultRenderer(PrimerPanel.class, new PrimerPanelCellRenderer()); mainTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { // If cell selection is enabled, both row and column change events are fired if (e.getValueIsAdjusting()) { // The mouse button has not yet been released } else{ displaySelectedPrimerDetailWindow(); } } }); mainTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getButton() == e.BUTTON3){ logger.info("copy Primer To clipboard"); int colIndex = 0; if(mainTable.getSelectedColumn() == colIndex){ PrimerPanel selected = (PrimerPanel) mainTable.getModel().getValueAt(mainTable.getSelectedRow(),0); String data = selected.getPrimer().getPrimerDetailsAsText(); System.out.println(data); } } // always display window displaySelectedPrimerDetailWindow(); } }); Enumeration<TableColumn> enu = mainTable.getColumnModel().getColumns(); while(enu.hasMoreElements()) { TableColumn col = enu.nextElement(); col.setCellRenderer(new ComponentCellRenderer()); col.setCellEditor(new ComponentCellRenderer()); } for(int n = 0; n < mainTable.getColumnModel().getColumnCount(); n++){ mainTable.getColumnModel().getColumn(n).setPreferredWidth(PrimerResultTableRow.getColumnSizes().get(n)); } JScrollPane scrollPane = new JScrollPane(mainTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); getContentPane().add(scrollPane, BorderLayout.CENTER); int nCount = 0; for(Primer primer: primRes){ if(primer.getScore() <= 1000 && nCount < MAX_NUMBER_OF_PRIMERS_REPORTED){ //logger.info("AddingPanel"); //tm.addRow(new Object[]{new PrimerPanel(primer)}); //logger.info("AddingRow"); tm.addRow( new PrimerResultTableRow(primer).getRow().toArray() ); nCount ++; } } this.setTitle("Primer finds"); this.setIconImage(AppIcons.getProgramIconImage()); this.setPreferredSize(new Dimension(700,400)); this.placeFrameupperLeftLocationOfThis(aliViewWin); this.pack(); this.setVisible(true); } public void placeFrameupperLeftLocationOfThis(Component parent){ if(parent != null){ int newX = parent.getX() + 100; int newY = parent.getY() + 100; this.setLocation(newX, newY); } } protected void displaySelectedPrimerDetailWindow() { int colIndex = 0; int rowIndex = mainTable.getSelectedRow(); Primer selectedPrimer = primerResult.get(rowIndex); //PrimerPanel selected = (PrimerPanel) mainTable.getModel().getValueAt(mainTable.getSelectedRow(),0); // find primer in alignment aliViewWindow.performFind(selectedPrimer.getSequence()); // show detail in new frame String data = selectedPrimer.getPrimerDetailsAsText(); if(primerDetailFrame == null){ primerDetailFrame = new PrimerDetailFrame(aliViewWindow); } primerDetailFrame.setText(data); primerDetailFrame.setVisible(true); } @Override public void dispose() { super.dispose(); if(primerDetailFrame != null){ primerDetailFrame.dispose(); } } }