package dods.clients.importwizard.GCMD; // Import all of java... import dods.clients.importwizard.*; import dods.clients.importwizard.ECHO.*; import java.lang.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.util.*; import java.io.*; import java.net.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.swing.table.*; import gnu.regexp.*; import org.jdom.*; import org.jdom.output.XMLOutputter; import org.jdom.input.DOMBuilder; /** * */ public class KeywordSearch extends SearchInterface implements ActionListener, ListSelectionListener { String url; DefaultHandler handler; Hashtable difs; Hashtable difPanels; Vector searchPanels; GridBagLayout gridbag; GridBagConstraints c; JPanel centerPanel; JPanel tempPanel; JTable idTable; JScrollPane idTableScroller; JPanel topPanel; JScrollPane topScroller; JPanel buttonPanel; //JComboBox logicTypeBox; JButton searchButton; JButton resetButton; //JButton showAllButton; JPanel bottomPanel; JPanel infoPanel; //JButton returnButton; JComboBox category; JList topicList; JList termAndVar; Document outXMLDoc; public KeywordSearch(String baseURL) { url = baseURL; difs = new Hashtable(); difPanels = new Hashtable(); searchPanels = new Vector(); handler = new DifHandler(); try {//extract info from an xml file on the web //xml = new File("http://gcmd.nasa.gov/servlets/md/get_valids.py?type=parametersvalid"); //xml = new File("get_valids.py"); // convert a file to a JDOM Document DOMBuilder domBuilder = new DOMBuilder(false); outXMLDoc = domBuilder.build(new URL("http://gcmd.nasa.gov/servlets/md/get_valids.py?type=parametersvalid")); } catch(NullPointerException ex){ System.err.println("\n File doesn't exist."); System.err.println(ex.getMessage()); } catch(JDOMException ex){ System.err.println("\nXML file convertion to Document failed."); System.err.println(ex.getMessage()); } catch(Exception ex){ System.err.println(ex.getMessage()); } initGUI(); } private void initGUI() { idTable = new JTable(); idTableScroller = new JScrollPane(idTable); topPanel = new JPanel(); topScroller = new JScrollPane(topPanel); infoPanel = new JPanel(); centerPanel = new JPanel(); buttonPanel = new JPanel(); //String[] logicTypes = { "AND", "OR" }; //logicTypeBox = new JComboBox(logicTypes); searchButton = new JButton("Search"); resetButton = new JButton("Reset"); gridbag = new GridBagLayout(); c = new GridBagConstraints(); // // Setup the search panel // topScroller.setPreferredSize(new Dimension(600,97)); topScroller.setMinimumSize(new Dimension(600,97)); topPanel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS)); Vector s = new Vector(); s.add(new String("EARTH SCIENCE")); category = new JComboBox(s); category.setPreferredSize(new Dimension(100,20)); category.setMinimumSize(new Dimension(100,20)); //SearchPanel search = new SearchPanel(); //search.addActionListener(this); //search.setActionCommands("togglePanel", "search"); //search.setMaximumSize(new Dimension(32768,30)); //searchPanels.addElement(search); topPanel.add(category); //search.setEnabled(true); String[] topics = {"Agriculture", "Atmosphere", "Biosphere", "Cryosphere", "Human Dimensions", "Hydrosphere", "Land Surface", "Oceans", "Paleoclimate", "Radiance Or Imagery", "Solid Earth", "Sun Earth Interactions"}; topicList = new JList(topics); topicList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); topicList.addListSelectionListener(this); JScrollPane topicScroller = new JScrollPane(topicList); topicScroller.setPreferredSize(new Dimension(150, 30)); topicScroller.setMinimumSize(new Dimension(150,30)); topPanel.add(topicScroller); termAndVar = new JList(); JScrollPane termScroller = new JScrollPane(termAndVar); termScroller.setPreferredSize(new Dimension(300, 30)); termScroller.setMinimumSize(new Dimension(300,30)); topPanel.add(termScroller); //search = new SearchPanel(); //search.addActionListener(this); //search.setActionCommands("togglePanel", "search"); //search.setMaximumSize(new Dimension(32768,30)); //searchPanels.addElement(search); //topPanel.add(search); //search.setEnabled(false); // // Setup the button panel // JPanel temp = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); buttonPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(2,2,2,2))); //temp.add(new JLabel("Logic:")); //temp.add(logicTypeBox); buttonPanel.add(temp); buttonPanel.add(Box.createVerticalGlue()); searchButton.addActionListener(this); searchButton.setActionCommand("search"); searchButton.setAlignmentX(JComponent.CENTER_ALIGNMENT); buttonPanel.add(searchButton); resetButton.addActionListener(this); resetButton.setActionCommand("reset"); resetButton.setAlignmentX(JComponent.CENTER_ALIGNMENT); buttonPanel.add(resetButton); buttonPanel.add(Box.createVerticalGlue()); // // Setup the ID list // centerPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Matching Datasets")); centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS)); idTableScroller.setBackground(java.awt.Color.white); Object[] selected = { }; Object[] ids = { }; idTable.setPreferredScrollableViewportSize(new Dimension(600, 300)); idTable.setModel(new GCMDTableModel(selected, ids)); idTable.getColumnModel().getColumn(0).setMaxWidth(80); idTable.getSelectionModel().addListSelectionListener(this); centerPanel.add(idTableScroller); infoPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Dataset Information")); infoPanel.setPreferredSize(new Dimension(600,50)); // // Add the components into the main panel // setLayout(gridbag); c.gridx = 0; c.gridy = 0; c.weightx = 1; c.weighty = 0; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(topScroller, c); add(topScroller); c.gridx = 1; c.gridy = 0; c.weightx = 0; c.weighty = 0; c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(buttonPanel, c); add(buttonPanel); c.gridx = 0; c.gridy = 1; c.gridwidth = 2; c.weightx = 1; c.weighty = 1; gridbag.setConstraints(centerPanel, c); add(centerPanel); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; c.weightx = 1; c.weighty = 0; gridbag.setConstraints(infoPanel, c); add(infoPanel); } protected Dif getDif(String difName, String sections) { //DefaultHandler handler = new DifHandler(); //SAXParserFactory factory = SAXParserFactory.newInstance(); /* Extracts info from Dif returned from the first query. No needs to make another query. try { //URL xmlFile = new URL(url + "/getdif.py?entry_id=" + difName URL xmlFile = new URL(url + "/getdifs.py?query=" + URLEncoder.encode("[Project:Short_Name='DODS']") + "&entry_id=" + difName + "&format=xml§ions=" + sections); System.out.println(url + "/getdifs.py?query=" + URLEncoder.encode("[Project:Short_Name='DODS']") + "&entry_id=" + difName + "&format=xml§ions=" + sections); //System.out.println(url + "/getdif.py?entry_id=" + difName // + "&format=xml§ions=" + sections); InputStream urlStream = xmlFile.openStream(); SAXParser saxParser = factory.newSAXParser(); saxParser.parse( urlStream, handler ); } catch(Throwable t) { t.printStackTrace(); } */ return (Dif)((DifHandler)handler).getDifs().elementAt(0); } /** * The function to handle action events. * @param e The event. */ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); /* // This event is generated when the user clicks the checkbox next // to a search field. Enable the search panel if it's disabled and // if it's the last one, create a new disabled search panel. if(command.equals("togglePanel")) { if(searchPanels.lastElement().equals(e.getSource()) && ((SearchPanel)e.getSource()).isEnabled() == false) { SearchPanel search = new SearchPanel(); search.setEnabled(false); search.setMaximumSize(new Dimension(32768, 30)); search.addActionListener(this); search.setActionCommands("togglePanel", "search"); searchPanels.addElement(search); topPanel.add(search); validate(); } ((SearchPanel)e.getSource()).toggleEnabled(); }*/ // if(command.equals("reset")) { topicList.clearSelection(); termAndVar.setListData(new Vector()); } // Triggered by either the search button, or by hitting enter // inside one of the text fields. Build a search string from // the enabled search panels, and get all the datasets that match. else if(command.equals("search")) { String searchString = ""; String category = new String("EARTH SCIENCE"); //if no <code>topic</code> selected, show all if (topicList.getSelectedValue() == null) { try { RE spaces = new RE(" "); category = spaces.substituteAll(category, "%20"); } catch(Exception ex) {} searchString += "[Parameters:Category='" + category + "'"; } else { String topic = topicList.getSelectedValue().toString().toUpperCase(); try { RE spaces = new RE(" "); category = spaces.substituteAll(category, "%20"); topic = spaces.substituteAll(topic, "%20"); } catch(Exception ex) {} searchString += "[Parameters:Category='" + category + "',Topic='" + topic + "'"; Object[] select = termAndVar.getSelectedValues(); // if no <code>term</code> selected, show all with this // <code>topic</code> if (select.length > 0) { int indexOfSep = select[0].toString().indexOf('>'); String term = select[0].toString().substring(0, indexOfSep-1); String var = select[0].toString().substring(indexOfSep+2); // if variable is empty, show all with this // <code>term</code> if (var.equals("")) { try { RE spaces = new RE(" "); term = spaces.substituteAll(term, "%20"); } catch(Exception ex) {} searchString += ",Term='" + term + "'"; } else { try { RE spaces = new RE(" "); term = spaces.substituteAll(term, "%20"); var = spaces.substituteAll(var, "%20"); } catch(Exception ex) {} searchString += ",Term='" + term + "',Variable='" + var + "'"; // if more than one selected for(int i=1;i<select.length;i++) { indexOfSep = select[i].toString().indexOf('>'); term = select[i].toString().substring(0, indexOfSep-1); var = select[i].toString().substring(indexOfSep+2); try { RE spaces = new RE(" "); term = spaces.substituteAll(term, "%20"); var = spaces.substituteAll(var, "%20"); } catch(Exception ex) {} searchString += "] OR " + "[Parameters:Category='" + category + "',Topic='" + topic + "',Term='" + term + "',Variable='" + var + "'"; } } } } searchString += "]"; //add spatial query JPanel spatial = ((GCMDSearch)getParent().getParent()).getSpatial(); if (((SpatialPanel)spatial).spatialIsSet()) { //southernmost String value = ((SpatialPanel)spatial).getSouthernmost().toUpperCase(); try { RE spaces = new RE(" "); value = spaces.substituteAll(value, "%20"); } catch(Exception ex) {} searchString += " AND " + "[Spatial_Coverage:Southernmost_Latitude='" + value + "',"; //northernmost value = ((SpatialPanel)spatial).getNorthernmost().toUpperCase(); try { RE spaces = new RE(" "); value = spaces.substituteAll(value, "%20"); } catch(Exception ex) {} searchString += "Northernmost_Latitude='" + value + "',"; //westernmost value = ((SpatialPanel)spatial).getWesternmost().toUpperCase(); try { RE spaces = new RE(" "); value = spaces.substituteAll(value, "%20"); } catch(Exception ex) {} searchString += "Westernmost_Longitude='" + value + "',"; //easternmost value = ((SpatialPanel)spatial).getEasternmost().toUpperCase(); try { RE spaces = new RE(" "); value = spaces.substituteAll(value, "%20"); } catch(Exception ex) {} searchString += "Easternmost_Longitude='" + value + "']"; } SearchThread search = new SearchThread(searchString); tempPanel = search.createTempPanel(); tempPanel.setMinimumSize(centerPanel.getSize()); tempPanel.setPreferredSize(centerPanel.getSize()); centerPanel.setVisible(false); c.gridx = 0; c.gridy = 1; c.gridwidth = 2; c.weightx = 1; c.weighty = 1; gridbag.setConstraints(tempPanel, c); remove(centerPanel); add(tempPanel); search.start(); } else if(command.equals("getSummary")) { JFrame summaryWindow = new JFrame(); JTextArea summaryText = new JTextArea(); JScrollPane summaryScroller = new JScrollPane(summaryText); int index = idTable.getSelectionModel().getMinSelectionIndex(); Dif dif = (Dif)idTable.getValueAt(index,1); summaryText.setEditable(false); if(dif.getSummary().equals("")) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) dif.setSummary("No Summary Available"); } summaryText.setText(dif.getSummary()); summaryWindow.setTitle(dif.getTitle()); summaryWindow.getContentPane().add(summaryScroller); summaryWindow.setSize(new Dimension(550,275)); summaryWindow.setVisible(true); } else if(command.equals("getGeneralInfo")) { JFrame infoWindow = new JFrame(); JTextArea infoText = new JTextArea(); JScrollPane infoScroller = new JScrollPane(infoText); int index = idTable.getSelectionModel().getMinSelectionIndex(); Dif dif = (Dif)idTable.getValueAt(index,1); infoText.setEditable(false); String generalInfo = ""; if(dif.getPersonnels() == null) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) generalInfo = generalInfo + "No Contact Infomation Available"; } else { generalInfo = generalInfo + "Contact Information"; for(int i=0; i<dif.getPersonnels().size(); i++) { generalInfo = generalInfo + "\n\nRole "; generalInfo = generalInfo + dif.getRole(i); generalInfo = generalInfo + "\nName "; generalInfo = generalInfo + dif.getName(i); generalInfo = generalInfo + "\nEmail "; generalInfo = generalInfo + dif.getEmail(i); generalInfo = generalInfo + "\nPhone "; generalInfo = generalInfo + dif.getPhone(i); generalInfo = generalInfo + "\nFax "; generalInfo = generalInfo + dif.getFax(i); generalInfo = generalInfo + "\nAddress "; generalInfo = generalInfo + dif.getAddress(i); } } if(dif.getParameters() == null) { generalInfo = generalInfo + "No Parameters Available"; } else { generalInfo = generalInfo + "\n\nParameters\n"; for(int i=0; i<dif.getParameters().size(); i++) { generalInfo = generalInfo + "\n"; generalInfo = generalInfo + dif.getCategory(i) + " > " + dif.getTopic(i) + " > " + dif.getTerm(i) + " > " + dif.getVariable(i); } } if(dif.getSpatialCoverage() == null) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) generalInfo = generalInfo + "No Spatial Coverage Infomation Available"; } else { generalInfo = generalInfo + "\n\nSpatial Coverage"; generalInfo = generalInfo + "\n\nSouthernmost Latitude: "; generalInfo = generalInfo + dif.getSouthernmost(); generalInfo = generalInfo + "\nNorthernmost Latitude: "; generalInfo = generalInfo + dif.getNorthernmost(); generalInfo = generalInfo + "\nWesternmost Longitude: "; generalInfo = generalInfo + dif.getWesternmost(); generalInfo = generalInfo + "\nEasternmost Longitude: "; generalInfo = generalInfo + dif.getEasternmost(); } if(dif.getTemporalCoverage() == null) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) generalInfo = generalInfo + "No Temporal Coverage Infomation Available"; } else { generalInfo = generalInfo + "\n\nTemporal Coverage"; generalInfo = generalInfo + "\n\nStart Date: "; generalInfo = generalInfo + dif.getStartDate(); generalInfo = generalInfo + "\nStop Date: "; generalInfo = generalInfo + dif.getStopDate(); } if(dif.getDataResolution() == null) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) generalInfo = generalInfo + "No Data Resolution Infomation Available"; } else { generalInfo = generalInfo + "\n\nData Resolution"; generalInfo = generalInfo + "\n\nLatitude Resolution: "; generalInfo = generalInfo + dif.getLatResolution(); generalInfo = generalInfo + "\nLongitude Resolution: "; generalInfo = generalInfo + dif.getLongResolution(); generalInfo = generalInfo + "\nTemporal Resolution: "; generalInfo = generalInfo + dif.getTemporalResolution(); } if(dif.getSummary().equals("")) { //Dif temp = getDif(dif.getID(), "Summary"); //dif.setSummary(temp.getSummary()); //if(dif.getSummary().equals("")) //dif.setSummary("No Summary Available"); generalInfo = generalInfo + "No Summary Infomation Available"; } else generalInfo = generalInfo + "\n\nSummary" + dif.getSummary(); infoText.setText(generalInfo); infoWindow.setTitle(dif.getTitle()); infoWindow.getContentPane().add(infoScroller); infoWindow.setSize(new Dimension(550,275)); infoWindow.setVisible(true); } } /** * The function to handle list selection events. * @param e The event. */ public void valueChanged(ListSelectionEvent e) { if(!e.getValueIsAdjusting()) { Object o = e.getSource(); if (o == topicList) { if (topicList.getSelectedValue() != null) { Vector valids = new Vector(); try {//get the desired valids Element root = outXMLDoc.getRootElement(); java.util.List parameters = root.getChildren(); String select = topicList.getSelectedValue().toString().toUpperCase(); for (int i=0; i<parameters.size(); i++) { if (((Element)parameters.get(i)).getChildText("Category").equals("EARTH SCIENCE") && ((Element)parameters.get(i)).getChildText("Topic").equals(select)) { String temp = ((Element)parameters.get(i)).getChildText("Term") + " > " + ((Element)parameters.get(i)).getChildText("Variable"); valids.add(temp); } } } catch(NullPointerException ex){ System.err.println("\n File doesn't exist."); System.err.println(ex.getMessage()); } catch(Exception ex){ System.err.println(ex.getMessage()); } termAndVar.setListData(valids); } } else { int index = ((ListSelectionModel)e.getSource()).getMinSelectionIndex(); if(index != -1) { JPanel difPanel; JPanel innerPanel; Dif dif = (Dif)idTable.getModel().getValueAt(index,1); if( (difPanel = (JPanel)difPanels.get(dif)) == null) { difPanel = new JPanel(); difPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Dataset Information")); difPanel.setLayout(new BoxLayout(difPanel, BoxLayout.Y_AXIS)); difPanel.add(new JLabel("<html><table style=\"color:black\"><tr><td valign=\"top\">Title:</td><td>" + dif.getTitle() + "</td></tr><tr><td>URL:</td><td>" + dif.getDodsURL().getBaseURL() + "</td></tr></table>")); innerPanel = new JPanel(); innerPanel.setBorder(BorderFactory.createEtchedBorder()); innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS)); JButton summary = new JButton("Get Summary"); summary.addActionListener(this); summary.setActionCommand("getSummary"); innerPanel.add(summary); JButton general = new JButton("Get General Info"); general.addActionListener(this); general.setActionCommand("getGeneralInfo"); innerPanel.add(general); innerPanel.setAlignmentX(LEFT_ALIGNMENT); difPanel.add(innerPanel); difPanels.put(dif, difPanel); } infoPanel.setVisible(false); difPanel.setVisible(true); remove(infoPanel); infoPanel = difPanel; c.gridx = 0; c.gridy = 2; c.weightx = 1; c.gridwidth = 2; c.weighty = 0; gridbag.setConstraints(infoPanel,c); add(infoPanel); } } } } /** * Returns all the urls that have the "Download" box checked. * @return all the urls that have the "Download" box checked. */ public DodsURL[] getURLs() { int numURLs = 0; for(int i=0;i<idTable.getRowCount();i++) { if(((Boolean)idTable.getValueAt(i,0)).booleanValue()) numURLs++; } DodsURL[] urls = new DodsURL[numURLs]; int urlIndex = 0; for(int i=0;i<idTable.getRowCount();i++) { if(((Boolean)idTable.getValueAt(i,0)).booleanValue()) { Dif dif = (Dif)idTable.getValueAt(i,1); urls[urlIndex++] = dif.getDodsURL(); } } return urls; } /* public static void main(String args[]) { JFrame frame = new JFrame("GCMD"); frame.getContentPane().add(new GCMDSearch("http://128.183.164.60/servlets/md/")); frame.pack(); frame.setVisible(true); } */ /** * This class makes a request to the GCMD servlets and * displays the results when it's done. */ public class SearchThread extends Thread implements ActionListener { String query; boolean drawTable; public SearchThread(String queryString) { query = queryString; drawTable = true; } public void run() { handler = new DifHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); try { URL xmlFile; if(query.equals("")) xmlFile = new URL(url + "/getdifs.py?query=" + URLEncoder.encode("[Project:Short_Name='DODS']")); // + "§ions=Entry_ID+Entry_Title+Related_URL+Personnel+Spatial_Coverage+Summary"); else xmlFile = new URL(url + "/getdifs.py?query=" + URLEncoder.encode("[Project:Short_Name='DODS'] AND (" + query + ")"));// + "§ions=Entry_ID+Entry_Title+Related_URL+Personnel+Spatial_Coverage+Summary"); System.out.println(url + "/getdifs.py?query=" + URLEncoder.encode("[Project:Short_Name='DODS'] AND (" + query + ")")); // + "§ions=Entry_ID+Entry_Title+Related_URL+Summary"); InputStream urlStream = xmlFile.openStream(); SAXParser saxParser = factory.newSAXParser(); saxParser.parse( urlStream, handler ); // If the request has been canceled, drawTable will be false // at this point. if(drawTable) { Vector idVector = ((DifHandler)handler).getDifs(); Object[] selected = new Boolean[idVector.size()]; Object[] ids = new Object[idVector.size()]; idVector.copyInto(ids); for(int i=0;i<ids.length;i++) { selected[i] = new Boolean(false); } c.gridx = 0; c.gridy = 1; c.gridwidth = 2; c.weightx = 1; c.weighty = 1; gridbag.setConstraints(centerPanel, c); centerPanel.setMinimumSize(tempPanel.getSize()); centerPanel.setPreferredSize(tempPanel.getSize()); int size0=idTable.getColumnModel().getColumn(0).getWidth(); int size1=idTable.getColumnModel().getColumn(1).getWidth(); // This is a rather clunky way of doing things, but for // some reason JDK1.1 won't size the columns correctly // unless I create a new table. idTable = new JTable(); idTable.setModel(new GCMDTableModel(selected, ids)); idTable.getColumnModel().getColumn(0).setPreferredWidth(size0); idTable.getColumnModel().getColumn(0).setMaxWidth(80); idTable.getColumnModel().getColumn(1).setPreferredWidth(size1); idTableScroller.setViewportView(idTable); idTable.getSelectionModel().addListSelectionListener(KeywordSearch.this); tempPanel.setVisible(false); add(centerPanel); centerPanel.setVisible(true); remove(tempPanel); getRootPane().getContentPane().validate(); } } catch(Throwable t) { t.printStackTrace(); } } /** * Create a temporary panel that can be used to cancel the search * request. * @return a temporary panel to show while searching. */ public JPanel createTempPanel() { JPanel temp = new JPanel(); JButton cancelButton = new JButton("Cancel"); temp.setLayout(new BoxLayout(temp, BoxLayout.Y_AXIS)); temp.setBorder(BorderFactory.createEmptyBorder(10,20,10,10)); temp.add(Box.createVerticalGlue()); JLabel text = new JLabel("Searching, please wait..."); text.setAlignmentX(Component.CENTER_ALIGNMENT); temp.add(text); cancelButton.addActionListener(this); cancelButton.setActionCommand("cancel"); cancelButton.setAlignmentX(Component.CENTER_ALIGNMENT); temp.add(cancelButton); temp.add(Box.createVerticalGlue()); return temp; } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("cancel")) { drawTable = false; c.gridx = 0; c.gridy = 1; c.gridwidth = 2; c.weightx = 1; c.weighty = 1; gridbag.setConstraints(centerPanel, c); centerPanel.setVisible(true); centerPanel.setMinimumSize(tempPanel.getSize()); centerPanel.setPreferredSize(tempPanel.getSize()); tempPanel.setVisible(false); remove(tempPanel); add(centerPanel); } } } }