Java Applet JFileChooser
Java swing arayüzlerinden - dosya sistemine erişimi sağlayan JFileChooser sınıfının detayları
jfc.showOpenDialog(null);
Bu kod parçacığı kullanıcının ön tanımlı dizinini gösteren bir dosya diyaloğu açar. Ön tanımlı dizininizi linux ortamında komut satırına “env” komutunu vererek ulaşabilirsiniz. Bu komutu çalıştırdığınızda karşınıza gelen listedeki HOME ortam değişkeni kullanıcının ön tanımlı dizinidir. Örnek görüntümüz şu şekilde olacaktır :
Peki biz dosya diyalogumuzu öntanımlı klasörde değil de başka klasörde açmak istersek ne yapmalıyız? Bunun için JFileChooser sınıfının parametre olarak dosya yolu yada dosya alan diğer yapılandırıcı metodunu kullanmalıyız. Örneğin ben dosya seçme diyaloğumu “/home/orhan/Downloads” klasöründe açmak istersem şu kod parçasını kullanmam gerekir :
jfc.showOpenDialog(null);
Bundan sonra ihtiyacımız olan kullanıcının hangi seçeneği seçtiğini öğrenmek. Kullanıcı herhangi bir dosyayı seçebilir veya işlemi iptal edebilir. Diyalogdan kullanıcı çıktısını şu şekilde alıyoruz :
int kullaniciSecimi = jfc.showOpenDialog(null);
kullaniciSecimi değişkeninin alabileceği değerler de JFileChooser sınıfında tanımlanmıştır. Bu değerler :
JFileChooser.CANCEL_OPTION //seçim iptal edildi
JFileChooser.ERROR_OPTION //işlem sırasında hata oluştu
Şimdi kullanıcının seçmiş olduğu dosya ismini JFileChooser sınıfından almayı öğrenelim.
System.out.println(jfc.getSelectedFile());
}
Kullanıcı tarafından seçilen dosya referansına ulaşmak için getSelectedFile() metodunu kullanıyoruz. Eğer kullanıcıya birden fazla dosya seçme imkanı tanımak istiyorsak sırasıyla şu işlemleri yapmalıyız.
int kullaniciSecimi = jfc.showOpenDialog(null);
if (kullaniciSecimi == JFileChooser.APPROVE_OPTION) {
for(File f : jfc.getSelectedFiles()) {
System.out.println(f);
}
}
Son olarak seçimimiza filtre eklemeyi öğrenelim. Örneğin sadece jpg uzantılı dosyaların seçilebilmesini istiyorsak :
jfc.setFileFilter(filter);
Şimdide yukardaki gibi bir ön izleme penceresine sahip bir JFileChooser nesnesi olutşuralım:
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
public class Test extends JFrame {
JFileChooser chooser = new JFileChooser();
ImagePreviewer previewer = new ImagePreviewer();
PreviewPanel previewPanel = new PreviewPanel();
class PreviewPanel extends JPanel {
public PreviewPanel() {
JLabel label = new JLabel("Resim Önizleme", SwingConstants.CENTER);
setPreferredSize(new Dimension(150,0));
setBorder(BorderFactory.createEtchedBorder());
setLayout(new BorderLayout());
label.setBorder(BorderFactory.createEtchedBorder());
add(label, BorderLayout.NORTH);
add(previewer, BorderLayout.CENTER);
}
}
public Test() {
super("Image Previewer Accessory");
Container contentPane = getContentPane();
JButton button = new JButton("Select A File");
contentPane.setLayout(new FlowLayout());
contentPane.add(button);
chooser.setAccessory(previewPanel);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int state = chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
String s = "CANCELED";
if(file != null &&
state == JFileChooser.APPROVE_OPTION) {
s = "File Selected: " + file.getPath();
}
JOptionPane.showMessageDialog(null, s);
}
});
chooser.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if(e.getPropertyName().equals(
JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
File f = (File)e.getNewValue();
String s = f.getPath(), suffix = null;
int i = s.lastIndexOf('.');
if(i > 0 && i < s.length() - 1)
suffix = s.substring(i+1).toLowerCase();
if(suffix.equals("gif") ||
suffix.equals("jpg"))
previewer.configure(f);
}
}
});
}
public static void main(String a[]) {
JFrame f = new Test();
f.setBounds(300, 300, 300, 75);
f.setVisible(true);
f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
}
class ImagePreviewer extends JLabel {
public void configure(File f) {
Dimension size = getSize();
Insets insets = getInsets();
ImageIcon icon = new ImageIcon(f.getPath());
setIcon(new ImageIcon(icon.getImage().getScaledInstance(
size.width - insets.left - insets.right,
size.height - insets.top - insets.bottom,
Image.SCALE_SMOOTH)));
}
}
Yukardaki kodlarda PreviewPanel nesnesi ile JFileChooserin sağ tarafında bir panel nesnesi oluşturuyoruz ve bu nesneyi chooser.setAccessory(previewPanel); diyerek JFileChoosere eklemiş oluyoruz. ImagePreviewer adında bir JLabel nesnesi oluşturuo içerisine tanımladığımız ImageIconu biraz önce oluşturduğumuz JPanel (previewPanel) nesnesi üzerine ekliyoruz.
chooser.addPropertyChangeListener tetikleyicisi ile de herhangi bir seçim durumunda seçili nesneye ait resmin ön izlemesinin JPanel içerisindeki JLabelde yer almasını sağlıyoruz.
Kaynak