1
35
36
39
40
41 import javax.swing.*;
42 import javax.swing.event.*;
43 import javax.swing.text.*;
44 import javax.swing.border.*;
45 import javax.swing.colorchooser.*;
46 import javax.swing.filechooser.*;
47 import javax.accessibility.*;
48
49 import java.awt.*;
50 import java.awt.event.*;
51 import java.beans.*;
52 import java.util.*;
53 import java.io.*;
54 import java.applet.*;
55 import java.net.*;
56
57
63 public class FileChooserDemo extends DemoModule {
64 JLabel theImage;
65 Icon jpgIcon;
66 Icon gifIcon;
67
68
71 public static void main(String[] args) {
72 FileChooserDemo demo = new FileChooserDemo(null);
73 demo.mainImpl();
74 }
75
76
79 public FileChooserDemo(SwingSet2 swingset) {
80 super(swingset, "FileChooserDemo", "toolbar/JFileChooser.gif");
83 createFileChooserDemo();
84 }
85
86 public void createFileChooserDemo() {
87 theImage = new JLabel("");
88 jpgIcon = createImageIcon("filechooser/jpgIcon.jpg", "jpg image");
89 gifIcon = createImageIcon("filechooser/gifIcon.gif", "gif image");
90
91 JPanel demoPanel = getDemoPanel();
92 demoPanel.setLayout(new BoxLayout(demoPanel, BoxLayout.Y_AXIS));
93
94 JPanel innerPanel = new JPanel();
95 innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
96
97 demoPanel.add(Box.createRigidArea(VGAP20));
98 demoPanel.add(innerPanel);
99 demoPanel.add(Box.createRigidArea(VGAP20));
100
101 innerPanel.add(Box.createRigidArea(HGAP20));
102
103 JPanel buttonPanel = new JPanel() {
105 public Dimension getMaximumSize() {
106 return new Dimension(getPreferredSize().width, super.getMaximumSize().height);
107 }
108 };
109 buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
110
111 buttonPanel.add(Box.createRigidArea(VGAP15));
112 buttonPanel.add(createPlainFileChooserButton());
113 buttonPanel.add(Box.createRigidArea(VGAP15));
114 buttonPanel.add(createPreviewFileChooserButton());
115 buttonPanel.add(Box.createRigidArea(VGAP15));
116 buttonPanel.add(createCustomFileChooserButton());
117 buttonPanel.add(Box.createVerticalGlue());
118
119 JPanel imagePanel = new JPanel();
121 imagePanel.setLayout(new BorderLayout());
122 imagePanel.setBorder(new BevelBorder(BevelBorder.LOWERED));
123 JScrollPane scroller = new JScrollPane(theImage);
124 scroller.getVerticalScrollBar().setUnitIncrement(10);
125 scroller.getHorizontalScrollBar().setUnitIncrement(10);
126 imagePanel.add(scroller, BorderLayout.CENTER);
127
128 innerPanel.add(buttonPanel);
130 innerPanel.add(Box.createRigidArea(HGAP30));
131 innerPanel.add(imagePanel);
132 innerPanel.add(Box.createRigidArea(HGAP20));
133 }
134
135 public JFileChooser createFileChooser() {
136 JFileChooser fc = new JFileChooser();
138
139 File swingFile = new File("resources/images/About.jpg");
141 if(swingFile.exists()) {
142 fc.setCurrentDirectory(swingFile);
143 fc.setSelectedFile(swingFile);
144 }
145
146 return fc;
147 }
148
149
150 public JButton createPlainFileChooserButton() {
151 Action a = new AbstractAction(getString("FileChooserDemo.plainbutton")) {
152 public void actionPerformed(ActionEvent e) {
153 JFileChooser fc = createFileChooser();
154
155 int result = fc.showOpenDialog(getDemoPanel());
157
158 if(result == JFileChooser.APPROVE_OPTION) {
160 loadImage(fc.getSelectedFile().getPath());
161 }
162 }
163 };
164 return createButton(a);
165 }
166
167 public JButton createPreviewFileChooserButton() {
168 Action a = new AbstractAction(getString("FileChooserDemo.previewbutton")) {
169 public void actionPerformed(ActionEvent e) {
170 JFileChooser fc = createFileChooser();
171
172 ExampleFileFilter filter = new ExampleFileFilter(
174 new String[] {"jpg", "gif"}, getString("FileChooserDemo.filterdescription")
175 );
176 ExampleFileView fileView = new ExampleFileView();
177 fileView.putIcon("jpg", jpgIcon);
178 fileView.putIcon("gif", gifIcon);
179 fc.setFileView(fileView);
180 fc.addChoosableFileFilter(filter);
181 fc.setFileFilter(filter);
182
183 fc.setAccessory(new FilePreviewer(fc));
185
186 int result = fc.showOpenDialog(getDemoPanel());
188
189 if(result == JFileChooser.APPROVE_OPTION) {
191 loadImage(fc.getSelectedFile().getPath());
192 }
193 }
194 };
195 return createButton(a);
196 }
197
198 JDialog dialog;
199 JFileChooser fc;
200
201 public JButton createCustomFileChooserButton() {
202 Action a = new AbstractAction(getString("FileChooserDemo.custombutton")) {
203 public void actionPerformed(ActionEvent e) {
204 fc = createFileChooser();
205
206 ExampleFileFilter filter = new ExampleFileFilter(
208 new String[] {"jpg", "gif"}, getString("FileChooserDemo.filterdescription")
209 );
210 ExampleFileView fileView = new ExampleFileView();
211 fileView.putIcon("jpg", jpgIcon);
212 fileView.putIcon("gif", gifIcon);
213 fc.setFileView(fileView);
214 fc.addChoosableFileFilter(filter);
215
216 fc.setAccessory(new FilePreviewer(fc));
218
219 fc.setControlButtonsAreShown(false);
221
222 JPanel custom = new JPanel();
225 custom.setLayout(new BoxLayout(custom, BoxLayout.Y_AXIS));
226 custom.add(Box.createRigidArea(VGAP10));
227 JLabel description = new JLabel(getString("FileChooserDemo.description"));
228 description.setAlignmentX(JLabel.CENTER_ALIGNMENT);
229 custom.add(description);
230 custom.add(Box.createRigidArea(VGAP10));
231 custom.add(fc);
232
233 Action okAction = createOKAction();
234 fc.addActionListener(okAction);
235
236 JPanel buttons = new JPanel();
237 buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));
238 buttons.add(Box.createRigidArea(HGAP10));
239 buttons.add(createImageButton(createFindAction()));
240 buttons.add(Box.createRigidArea(HGAP10));
241 buttons.add(createButton(createAboutAction()));
242 buttons.add(Box.createRigidArea(HGAP10));
243 buttons.add(createButton(okAction));
244 buttons.add(Box.createRigidArea(HGAP10));
245 buttons.add(createButton(createCancelAction()));
246 buttons.add(Box.createRigidArea(HGAP10));
247 buttons.add(createImageButton(createHelpAction()));
248 buttons.add(Box.createRigidArea(HGAP10));
249
250 custom.add(buttons);
251 custom.add(Box.createRigidArea(VGAP10));
252
253 Frame parent = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, getDemoPanel());
255 dialog = new JDialog(parent, getString("FileChooserDemo.dialogtitle"), true);
256 dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
257 dialog.getContentPane().add(custom, BorderLayout.CENTER);
258 dialog.pack();
259 dialog.setLocationRelativeTo(getDemoPanel());
260 dialog.show();
261 }
262 };
263 return createButton(a);
264 }
265
266 public Action createAboutAction() {
267 return new AbstractAction(getString("FileChooserDemo.about")) {
268 public void actionPerformed(ActionEvent e) {
269 File file = fc.getSelectedFile();
270 String text;
271 if(file == null) {
272 text = getString("FileChooserDemo.nofileselected");
273 } else {
274 text = "<html>" + getString("FileChooserDemo.thefile");
275 text += "<br><font color=green>" + file.getName() + "</font><br>";
276 text += getString("FileChooserDemo.isprobably") + "</html>";
277 }
278 JOptionPane.showMessageDialog(getDemoPanel(), text);
279 }
280 };
281 }
282
283 public Action createOKAction() {
284 return new AbstractAction(getString("FileChooserDemo.ok")) {
285 public void actionPerformed(ActionEvent e) {
286 dialog.dispose();
287 if (!e.getActionCommand().equals(JFileChooser.CANCEL_SELECTION)
288 && fc.getSelectedFile() != null) {
289
290 loadImage(fc.getSelectedFile().getPath());
291 }
292 }
293 };
294 }
295
296 public Action createCancelAction() {
297 return new AbstractAction(getString("FileChooserDemo.cancel")) {
298 public void actionPerformed(ActionEvent e) {
299 dialog.dispose();
300 }
301 };
302 }
303
304 public Action createFindAction() {
305 Icon icon = createImageIcon("filechooser/find.gif", getString("FileChooserDemo.find"));
306 return new AbstractAction("", icon) {
307 public void actionPerformed(ActionEvent e) {
308 String result = JOptionPane.showInputDialog(getDemoPanel(), getString("FileChooserDemo.findquestion"));
309 if (result != null) {
310 JOptionPane.showMessageDialog(getDemoPanel(), getString("FileChooserDemo.findresponse"));
311 }
312 }
313 };
314 }
315
316 public Action createHelpAction() {
317 Icon icon = createImageIcon("filechooser/help.gif", getString("FileChooserDemo.help"));
318 return new AbstractAction("", icon) {
319 public void actionPerformed(ActionEvent e) {
320 JOptionPane.showMessageDialog(getDemoPanel(), getString("FileChooserDemo.helptext"));
321 }
322 };
323 }
324
325 class MyImageIcon extends ImageIcon {
326 public MyImageIcon(String filename) {
327 super(filename);
328 };
329 public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
330 g.setColor(Color.white);
331 g.fillRect(0,0, c.getWidth(), c.getHeight());
332 if(getImageObserver() == null) {
333 g.drawImage(
334 getImage(),
335 c.getWidth()/2 - getIconWidth()/2,
336 c.getHeight()/2 - getIconHeight()/2,
337 c
338 );
339 } else {
340 g.drawImage(
341 getImage(),
342 c.getWidth()/2 - getIconWidth()/2,
343 c.getHeight()/2 - getIconHeight()/2,
344 getImageObserver()
345 );
346 }
347 }
348 }
349
350 public void loadImage(String filename) {
351 theImage.setIcon(new MyImageIcon(filename));
352 }
353
354 public JButton createButton(Action a) {
355 JButton b = new JButton(a) {
356 public Dimension getMaximumSize() {
357 int width = Short.MAX_VALUE;
358 int height = super.getMaximumSize().height;
359 return new Dimension(width, height);
360 }
361 };
362 return b;
363 }
364
365 public JButton createImageButton(Action a) {
366 JButton b = new JButton(a);
367 b.setMargin(new Insets(0,0,0,0));
368 return b;
369 }
370 }
371
372 class FilePreviewer extends JComponent implements PropertyChangeListener {
373 ImageIcon thumbnail = null;
374
375 public FilePreviewer(JFileChooser fc) {
376 setPreferredSize(new Dimension(100, 50));
377 fc.addPropertyChangeListener(this);
378 setBorder(new BevelBorder(BevelBorder.LOWERED));
379 }
380
381 public void loadImage(File f) {
382 if (f == null) {
383 thumbnail = null;
384 } else {
385 ImageIcon tmpIcon = new ImageIcon(f.getPath());
386 if(tmpIcon.getIconWidth() > 90) {
387 thumbnail = new ImageIcon(
388 tmpIcon.getImage().getScaledInstance(90, -1, Image.SCALE_DEFAULT));
389 } else {
390 thumbnail = tmpIcon;
391 }
392 }
393 }
394
395 public void propertyChange(PropertyChangeEvent e) {
396 String prop = e.getPropertyName();
397 if(prop == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
398 if(isShowing()) {
399 loadImage((File) e.getNewValue());
400 repaint();
401 }
402 }
403 }
404
405 public void paint(Graphics g) {
406 super.paint(g);
407 if(thumbnail != null) {
408 int x = getWidth()/2 - thumbnail.getIconWidth()/2;
409 int y = getHeight()/2 - thumbnail.getIconHeight()/2;
410 if(y < 0) {
411 y = 0;
412 }
413
414 if(x < 5) {
415 x = 5;
416 }
417 thumbnail.paintIcon(this, g, x, y);
418 }
419 }
420 }
421
422