/* Copyright @ 2004, The Institute for Genomic Research (TIGR). All rights reserved. */ /****************************************************************************** * Author: Jianwei (Jerry) Li. * Name: InputHeaderSelector (ver. 1.0) * Date: Created on 10/01/04; modified on 10/01/04 * Descpt: A class that print a pup-up window for selecting a row of table * as the header of input file. * Modification History: *****************************************************************************/ package org.tigr.util.swing; import java.awt.*; import java.awt.event.*; import javax.swing.*; import org.tigr.util.*; import org.tigr.util.awt.*; public class InputHeaderSelector extends JDialog implements InitialWindow, MouseListener, KeyListener { // component declaration private JFrame gParent; private JLabel gInfoLB, gCellShow, gCellLoc; private JPanel gFxnPL, basePanel; private JScrollPane gTableScroll; private JTable gTable; // variable declaration private boolean gDataEntered; private int gSizeX, gSizeY; private int gSelX, gSelY; private String[] gHeader; private String[][] gTableData; public InputHeaderSelector(JFrame owner, String[] data) { this(owner, data, new String(""), true); } public InputHeaderSelector(JFrame owner, String[] data, String title, boolean modal) { super(owner, title, modal); gParent = owner; gSizeX = 450; gSizeY = 350; gSelX = 0; gSelY = 0; gDataEntered = false; gTableData = setTableData(data); createGUI(); pack(); } /************************************************************************** * Description: * overrides the abstract method. *************************************************************************/ public void actionPerformed(ActionEvent ae){ if(ae.getSource() == cancelBtn){ gDataEntered = false; terminate(); } else if (ae.getSource() == okBtn){ gDataEntered = true; terminate(); } } /************************************************************************** * Description: * overrides the abstract method. *************************************************************************/ public void alertUsers(String msg){ } /*************************************************************************** * Description: * overrides the abstract method to create a GUI. **************************************************************************/ public void createGUI(){ int x, y; Dimension pSize, btnSize; btnSize = new Dimension(50, 23); addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent evt) { gDataEntered = false; } }); basePanel = new JPanel(new GridBagLayout()); this.getContentPane().add(basePanel); gInfoLB = new JLabel("Please select the header of your data file: "); gTable = new JTable(gTableData, gHeader); gTable.setDragEnabled(false); gTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); gTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); gTable.addMouseListener(this); gTable.addKeyListener(this); gTableScroll = new JScrollPane(gTable); gTableScroll.setBorder(low); gCellLoc = new JLabel(); gCellLoc.setPreferredSize(btnSize); gCellLoc.setMaximumSize(btnSize); gCellLoc.setMinimumSize(btnSize); gCellShow = new JLabel(); gCellShow.setBorder(low); gCellShow.setMaximumSize(new Dimension(gSizeX-60, 23)); gCellShow.setMinimumSize(new Dimension(gSizeX-60, 23)); gFxnPL = new JPanel(new GridBagLayout()); okBtn.setBorder(high); okBtn.setPreferredSize(btnSize); okBtn.setMinimumSize(btnSize); okBtn.setMaximumSize(btnSize); okBtn.addActionListener(this); cancelBtn.setBorder(high); cancelBtn.setPreferredSize(btnSize); cancelBtn.setMinimumSize(btnSize); cancelBtn.setMaximumSize(btnSize); cancelBtn.addActionListener(this); showCellContent(gSelX, gSelY); gba.add(basePanel, gInfoLB, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, 10, 10, 5, 5); gba.add(basePanel, gTableScroll, 0, 1, 2, 1, 1, 1, GBA.B, GBA.C, 5, 5, 5, 5); gba.add(basePanel, gCellLoc, 0, 2, 1, 1, 0, 0, GBA.NONE, GBA.W, 4, 15, 5, 1); gba.add(basePanel, gCellShow, 1, 2, 1, 1, 1, 0, GBA.H, GBA.W, 4, 1, 5, 5); gba.add(basePanel, gFxnPL, 0, 3, 2, 1, 1, 0, GBA.H, GBA.C, 5, 5, 5, 5); gba.add(gFxnPL, okBtn, 0, 0, 1, 1, 0, 0, GBA.NONE, GBA.C, 5, 5, 5, 5); gba.add(gFxnPL, cancelBtn, 1, 0, 1, 1, 0, 0, GBA.NONE, GBA.C, 5, 5, 5, 5); resize(gSizeX, gSizeY); pSize = gParent.getSize(); x = (pSize.width-gSizeX)>>1; y = (pSize.height-gSizeY)>>1; setLocation(x, y); } public String[] getHeader() { return gTableData[gSelX]; } public int getHeaderOffset() { return gSelX; } public boolean isDataReady() { return gDataEntered; } /**************************************************************************** * Description: * overrides the abastrat method to handle key event. ***************************************************************************/ public void keyPressed(KeyEvent ke){ int kId = ke.getKeyCode(); gSelX = gTable.getSelectedRow(); gSelY = gTable.getSelectedColumn(); if(kId == KeyEvent.VK_ENTER){ gSelX++; } else if(kId == KeyEvent.VK_UP){ gSelX--; } else if(kId == KeyEvent.VK_DOWN){ gSelX++; } else if(kId == KeyEvent.VK_LEFT){ gSelY--; } else if(kId == KeyEvent.VK_RIGHT){ gSelY++; } if(gSelY < 0){ gSelY++; } if(gSelX < 0){ gSelX++; } showCellContent(gSelX, gSelY); } public void keyReleased(KeyEvent ke){} public void keyTyped(KeyEvent ke){} /**************************************************************************** * Description: * overrides the abastrat method to handle moues event. ***************************************************************************/ public void mouseClicked(MouseEvent me){ gSelX = gTable.getSelectedRow(); gSelY = gTable.getSelectedColumn(); showCellContent(gSelX, gSelY); } public void mouseEntered(MouseEvent me) {} public void mouseExited(MouseEvent me){} public void mousePressed(MouseEvent me) {} public void mouseReleased(MouseEvent me) {} /*************************************************************************** * Description: * overrides the abstract method to despose this class. ****************************************************************************/ public void terminate(){ setVisible(false); if(basePanel != null){ basePanel.removeAll(); } this.validate(); repaint(); dispose(); basePanel = null; } /*************************************************************************** * Description: * finds the largest number of elements. *

Parameter: *
lines -- the set of lines each of which is tab-delimeted string. *

Return: the largest number. **************************************************************************/ private int getLargestY(String[] lines){ int largest, small, length; length = lines.length; largest = 0; for(int i=0; iDescripiton: * alter a one-dimesion array to a two-dimesion array so that it can be * showed in a table. *

Parameter: *
pData -- one dimensional array to be changed. *

Return: the two-dimensional array. ***************************************************************************/ private String[][] setTableData(String[] pData){ int i; int x = pData.length; int y = getLargestY(pData); gHeader = new String[y]; for(i=0; i