Skip to content
Snippets Groups Projects
FileChooserPanel.java 2.38 KiB
package uiutils;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;

public class FileChooserPanel extends JPanel implements IOutput<File>, ActionListener{
	private static final long serialVersionUID = 3136641561102977065L;
	private JButton button;
	private JLabel text;
	private File out;
	private int maxFilenameCharactersShown;
	
	private boolean selectFile = false;
	private String fileEnding = "";
	
	public FileChooserPanel(String btnTxt) {
		this(btnTxt, 30);
	}
	
	public FileChooserPanel(String btnTxt, int maxFilenameCharactersShown) {
		super();
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.maxFilenameCharactersShown = maxFilenameCharactersShown;
		button = new JButton(btnTxt);
		button.addActionListener(this);
		
		text = new JLabel("no folder selected");
		
		this.add(button);
		this.add(text);
	}

	public FileChooserPanel switchToFileSelect(String fileEndingFilter) {
		selectFile = true;
		this.fileEnding = fileEndingFilter;
		text.setText("no file selected");
		return this;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		JFileChooser chooser = new JFileChooser(); 
	    chooser.setCurrentDirectory(new java.io.File("."));
	    
	    if (!selectFile) {
	    
		    chooser.setDialogTitle("Select Folder");
		    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
	    } else {
	        chooser.setDialogTitle("Select File");
		    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		    chooser.setFileFilter(new FileFilter() {
				
				@Override
				public String getDescription() {
					return "*" + fileEnding;
				}
				
				@Override
				public boolean accept(File f) {
					return f.getName().endsWith(fileEnding) || f.isDirectory();
				}
			});
	    }
	    //
	    // disable the "All files" option.
	    //
	    chooser.setAcceptAllFileFilterUsed(false);
	    //    
	    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 
	      out = chooser.getSelectedFile();
	      text.setText(out.getAbsolutePath().substring(
	    		  (int)Math.max(0, out.getAbsolutePath().length() - maxFilenameCharactersShown)));
	      
	      this.revalidate();
	    }
	}

	@Override
	public File getOutput() {
		return out;
	}
}