package org.esa.snap.ui.tooladapter.model; import org.esa.snap.core.util.StringUtils; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileFilter; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.io.File; /** * Created by jcoravu on 10/6/2016. */ public class FilePanel extends JPanel { private final JTextField textField; private final JButton browseButton; public FilePanel() { super(new BorderLayout()); this.textField = new JTextField(); this.textField.setBorder(new EmptyBorder(0, 0, 0, 0)); this.browseButton = new JButton("..."); browseButton.setFocusable(false); Dimension size = new Dimension(26, 16); browseButton.setPreferredSize(size); browseButton.setMinimumSize(size); addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent event) { textField.requestFocusInWindow(); } }); add(this.textField, BorderLayout.CENTER); add(browseButton, BorderLayout.EAST); } public void addBrowseButtonActionListener(ActionListener actionListener) { this.browseButton.addActionListener(actionListener); } public String getText() { return this.textField.getText(); } public void setText(String text) { this.textField.setText(text); } public void addTextComponentFocusListener(FocusListener focusListener) { this.textField.addFocusListener(focusListener); } public File showFileChooserDialog(int selectionMode, FileFilter filter) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(selectionMode); String filePath = textField.getText(); if (!StringUtils.isNullOrEmpty(filePath)) { File currentFile = new File(filePath); fileChooser.setSelectedFile(currentFile); } if (filter != null) { fileChooser.setFileFilter(filter); } int resultState = fileChooser.showDialog(FilePanel.this, "Select"); if (resultState == JFileChooser.APPROVE_OPTION && fileChooser.getSelectedFile() != null) { textField.setText(fileChooser.getSelectedFile().getAbsolutePath()); return fileChooser.getSelectedFile(); } return null; } }