Avatar billede frostware Nybegynder
26. december 2005 - 12:59 Der er 7 kommentarer og
1 løsning

FileFilter på FileChooser

Hej

Nu har jeg læst om mit problem diverse steder og jeg forstår det stadigvæk ikke...

Når jeg trykker på en knap sker der bl.a. følgende:
    String filename = File.separator + "tmp";
    JFileChooser fc = new JFileChooser(new File(filename));

Og det virker fint. Men jeg vil kun have vist billeder, altså .jpg .gif .png osv.

Hvordan laver man et filter så det kun er de filer der bliver vist??
Avatar billede soreno Praktikant
26. december 2005 - 13:05 #1
Avatar billede frostware Nybegynder
26. december 2005 - 13:30 #2
Ja der har jeg været inde, men jeg synes det ser lidt uoverskueligt ud. Kan det passe at det skal være så besværligt?

Jeg har bare en forestilling om at det kan gøres på et par linier. Men det kan det nok ikke
Avatar billede soreno Praktikant
26. december 2005 - 13:53 #3
Det er skam ikke så svært:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

public class Test extends JFrame implements ActionListener {
  private static final long serialVersionUID = 1L;
  private JLabel label;
  private JButton button;

  public Test() {
    setTitle("ChooserDemo");
    label = new JLabel("no file");
    add(label, BorderLayout.NORTH);
    button = new JButton("Choose");
    button.addActionListener(this);
    add(button, BorderLayout.SOUTH);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JFrame.setDefaultLookAndFeelDecorated(true);
    setSize(300, 200);
    setLocationRelativeTo(this);
  }

  public void actionPerformed(ActionEvent e) {
    JFileChooser fc = new JFileChooser(new File("C:\\WINDOWS"));
    fc.addChoosableFileFilter(new ImageFilter());

    int retVal = fc.showDialog(this, "Choose file");
    switch (retVal) {
      case JFileChooser.CANCEL_OPTION:
        label.setText("Cancel");
        break;
      case JFileChooser.ERROR_OPTION:
        label.setText("Error");
        break;
      case JFileChooser.APPROVE_OPTION:
        label.setText(fc.getSelectedFile().getAbsolutePath());
        break;
    }
  }

  public static void main(String args[]) {
    new Test().setVisible(true);
  }
}

class ImageFilter extends FileFilter {
  public boolean accept(File f) {
    return f.getName().endsWith(".bmp");
  }

  public String getDescription() {
    return "Images (bmp)";
  }
}
Avatar billede frostware Nybegynder
26. december 2005 - 14:04 #4
aha. Ja så skete der noget. Hvordan skal jeg gøre hvis der skal være flere filtyper i samme filter?

class ImageFilter extends FileFilter {
  public boolean accept(File f) {
    return f.getName().endsWith(".bmp");
  }

  public String getDescription() {
    return "Images (bmp)";
  }
}
Avatar billede soreno Praktikant
26. december 2005 - 15:31 #5
public boolean accept(File f) {
    return f.getName().endsWith(".bmp");
  }


F.eks.

public boolean accept(File f) {
  String name = f.getName();
  return name.endsWith(".bmp") || name.endsWith("*.png") || name.endsWith(".foo");
  }
Avatar billede frostware Nybegynder
31. december 2005 - 11:44 #6
det er fint nok. Men jeg kan ikke se mapperne...
Avatar billede soreno Praktikant
31. december 2005 - 11:55 #7
Nå ja, sådan gøres det:
class ImageFilter extends FileFilter {
  public boolean accept(File f) {
    if (f.isDirectory()) {
      return true;
    }
    String name = f.getName().toLowerCase();
    return name.endsWith(".bmp") || name.endsWith(".png") || name.endsWith(".jpg");
  }

  public String getDescription() {
    return "Images (bmp, png, jpg)";
  }
}
Avatar billede frostware Nybegynder
31. december 2005 - 12:08 #8
Super. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester