/* * Copyright 2011 Uwe Krueger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.mandelsoft.swing; import java.awt.Insets; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.Locale; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileFilter; import com.mandelsoft.util.Utils; /** * * @author Uwe Krueger */ public class FilePanel extends GBCPanel { public static final String PROP_FILENAME="filename"; private String name; private FileFilter filter; private JTextField field; private JButton select; private Window frame; private boolean editable; private int mode=JFileChooser.FILES_ONLY; public FilePanel(String name, String def, Window frame) { this(name,def,null,frame); } public FilePanel(String name, String def, FileFilter filter, Window frame) { super(); this.frame=frame; this.filter=filter; add(new JLabel(name), GBC(0, 0).setWeight(0, 0).setRightInset(10)); add(field=new JTextField(), GBC(1, 0).setFill(com.mandelsoft.swing.GBC.HORIZONTAL).setWeight(200, 0)); field.setText(def); field.setColumns(30); field.getDocument().addDocumentListener(new FilenameListener()); select=new JButton("select"); add(select, GBC(2, 0).setWeight(0, 0)); select.setMargin(new Insets(0, 0, 0, 0)); select.addActionListener(new FileChooserAction()); } public boolean isEditable() { return editable; } public void setEnableChooser(boolean editable) { this.editable=editable; select.setVisible(editable); //field.setEditable(editable); } public String getFilename() { return field.getText(); } public void setFilename(String name) { field.setText(name); } public void setFileChooserMode(int m) { mode=m; } private class FilenameListener implements DocumentListener { private String old=field.getText(); private void change() { String f=field.getText(); if (f.equals(old)) return; firePropertyChange(PROP_FILENAME, old, field.getText()); old=field.getText(); } public void insertUpdate(DocumentEvent e) { change(); } public void removeUpdate(DocumentEvent e) { change(); } public void changedUpdate(DocumentEvent e) { change(); } } private class FileChooserAction implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser c=new JFileChooser(); c.setLocale(Locale.UK); if (filter!=null) c.setFileFilter(filter); String cur=field.getText(); if (Utils.isEmpty(cur)) cur="."; File f=new File(cur); if (f.isDirectory()) c.setCurrentDirectory(f); else { c.setSelectedFile(f); } c.setFileSelectionMode(mode); int result=c.showDialog(frame, "select"); if (result==JFileChooser.APPROVE_OPTION) { field.setText(c.getSelectedFile().getPath()); } } } }