/* * Copyright 1998, University Corporation for Atmospheric Research * All Rights Reserved. * See file LICENSE for copying and redistribution conditions. * * $Id: FileDialogPanel.java,v 1.2 2001-11-27 22:29:31 dglo Exp $ */ package visad.data.netcdf; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Component; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Label; import java.awt.List; import java.awt.Panel; import java.awt.TextField; /** * A non-Window equivalent of FileDialog. */ public class FileDialogPanel extends Panel { /** * The pathname. */ private String pathname; /** * Construct. */ public FileDialogPanel(String filter, String initialPathname) { super(new GridBagLayout()); pathname = initialPathname; Component folderComponent = newFolderComponent(); Component filterComponent = newFilterComponent(filter); Component filesListComponent = newFilesListComponent(); Component foldersListComponent = newFoldersListComponent(); Component fileComponent = newFileComponent(initialPathname); Component buttonsComponent = newButtonsComponent(); addComponent(folderComponent, 0, 0, GridBagConstraints.HORIZONTAL); addComponent(filterComponent, 0, 1, GridBagConstraints.HORIZONTAL); addComponent(filesListComponent, 1, 1, GridBagConstraints.BOTH); addComponent(foldersListComponent, 0, 2, GridBagConstraints.BOTH); addComponent(fileComponent, 0, 3, GridBagConstraints.HORIZONTAL); addComponent(buttonsComponent, 0, 4, GridBagConstraints.HORIZONTAL); validate(); setSize(getPreferredSize()); } /** * Add a component. */ protected void addComponent(Component component, int gridx, int gridy, int fill) { GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor= GridBagConstraints.NORTHWEST; gbc.gridx = gridx; gbc.gridy = gridy; gbc.fill= fill; ((GridBagLayout)getLayout()).setConstraints(component, gbc); add(component); } /** * Return a folder component. */ protected Component newFolderComponent() { return newTextComponent("Enter path or folder name:", System.getProperty("user.dir")); } /** * Return a filter component. */ protected Component newFilterComponent(String pattern) { return newTextComponent("Filter", pattern); } /** * Return a files list component. */ protected Component newFilesListComponent() { return newListComponent("Files", new String[] {"file1", "file2"}); } /** * Return a folders list component. */ protected Component newFoldersListComponent() { return newListComponent("Folders", new String[] {"folder1", "folder2"}); } /** * Return a file component. */ protected Component newFileComponent(String initialPathname) { return newTextComponent("Enter file name:", initialPathname); } /** * Return a buttons component. */ protected Component newButtonsComponent() { Panel panel = new Panel(new GridBagLayout()); addButton(panel, new Button("Update")); addButton(panel, new Button("Reset")); return panel; } /** * Add a button to a panel. */ protected void addButton(Panel panel, Button button) { GridBagConstraints gbc = new GridBagConstraints(); ((GridBagLayout)panel.getLayout()).setConstraints(button, gbc); panel.add(button); } /** * Return a list component. */ protected Component newListComponent(String title, String[] items) { List list = new List(items.length); for (int i = 0; i < items.length; ++i) list.add(items[i]); return newLabeledComponent(title, list); } /** * Return a text component (label and text field). */ protected Component newTextComponent(String title, String initialText) { return newLabeledComponent(title, new TextField(initialText, 20)); } /** * Return a labeled component. */ protected Component newLabeledComponent(String title, Component component) { BorderLayout lm = new BorderLayout(); Panel panel = new Panel(lm); Label label = new Label(title, Label.LEFT); lm.addLayoutComponent(label, BorderLayout.NORTH); panel.add(label); lm.addLayoutComponent(component, BorderLayout.SOUTH); panel.add(component); return panel; } /** * Gets the pathname. */ public String getFile() { return pathname; } /** * Sets the pathname. */ public void setFile(String pathname) { this.pathname = pathname; } /** * Test this class. */ public static void main(String[] args) { Frame frame = new Frame("FileDialogPanel Test"); FileDialogPanel fileDialog = new FileDialogPanel("*.*", "dummy.ext"); frame.add(fileDialog); frame.show(); } }