package org.atdl4j.ui.swing.app.impl; import java.awt.BorderLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.filechooser.FileFilter; import org.atdl4j.config.Atdl4jOptions; import org.atdl4j.ui.app.impl.AbstractFixatdlFileSelectionPanel; /** * Represents the FIXatdl file selection Swing-specific GUI component. * * @author Scott Atwell * @version 1.0, Feb 28, 2010 */ public class SwingFixatdlFileSelectionPanel extends AbstractFixatdlFileSelectionPanel { Window parentComposite; JPanel composite; JTextField filepathText; JButton browseButton; public Object buildFixatdlFileSelectionPanel(Object parentOrShell, Atdl4jOptions atdl4jOptions) { return buildFixatdlFileSelectionPanel( (Window) parentOrShell, atdl4jOptions ); } public JPanel buildFixatdlFileSelectionPanel(Window aParentComposite, Atdl4jOptions atdl4jOptions) { setAtdl4jOptions( atdl4jOptions ); setParentComposite( aParentComposite ); composite = new JPanel(new BorderLayout()); composite.setBorder(BorderFactory.createTitledBorder("Load FIXatdl XML File")); filepathText = new JTextField(20); // -- Handle Enter key within Text field -- filepathText.addKeyListener(new KeyAdapter (){ @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (!"".equals(filepathText.getText().trim())) { fireFixatdlFileSelectedEvent( filepathText.getText() ); } } } }); browseButton = new JButton("..."); browseButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(filepathText.getText()); fc.addChoosableFileFilter(new FileFilter() { @Override public String getDescription() { return "*.xml"; } public String getExtension(File f) { String ext = null; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; } @Override public boolean accept(File f) { if (f.isDirectory()) { return true; } String extension = getExtension(f); if (extension != null) { if (extension.equals("xml")) { return true; } } return false; } }); int returnVal = fc.showOpenDialog(parentComposite); if (returnVal == JFileChooser.APPROVE_OPTION){ File f = fc.getSelectedFile(); filepathText.setText(f.getPath()); fireFixatdlFileSelectedEvent( f.getPath() ); } } }); composite.add(filepathText, BorderLayout.CENTER); composite.add(browseButton, BorderLayout.EAST); return composite; } /* (non-Javadoc) * @see org.atdl4j.ui.app.FixatdlFileSelectionPanel#selectFilename(java.lang.String) */ @Override public void selectFilename(String aFilename) { if ( filepathText != null ) { filepathText.setText( aFilename ); fireFixatdlFileSelectedEvent( aFilename ); } } /** * Returns getParentComposite().getShell(). * @return the shell */ private Window getShell() { if ( getParentComposite() != null ) { return (Window)getParentComposite().getParent(); } else { return null; } } /** * @return the parentComposite */ private Window getParentComposite() { return this.parentComposite; } /** * @param aParentComposite the parentComposite to set */ private void setParentComposite(Window aParentComposite) { this.parentComposite = aParentComposite; } /* (non-Javadoc) * @see org.atdl4j.ui.app.FixatdlFileSelectionPanel#setVisible(boolean) */ @Override public void setVisible(boolean aVisible) { if (composite != null) { composite.setVisible( aVisible ); } } }