تعلم كيفية ظهور الصورة للمعاينة فى JFileChooser

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم كيفية ظهور الصورة للمعاينة فى JFileChooser

مُساهمة من طرف زهراء في السبت مارس 14, 2015 11:26 am

بسم الله الرحمن الرحيم

أهلا بكم


اليوم كيفية اظهار الصور فى مربع اختيار الملفات JFileChooser للمعاينة قبل فتحها وتوجد طرق كثيرة لفعل ذلك ولكنى أخترت اسهلها ....فمثلا سنقوم بانشاء عنصر تسمية label ووضع صورة فقط به ومن خلال الاسلوب Accessory Components التى يتيحها لنا العنصر JFileChooser يمكننا وضع عنصر التسمية الذى يحمل الصورة وهى على النحو التالى :

1_ إستيراد مكتبات العمل اللازمة وهى على النحو التالى :

الكود:
import javax.swing.*;
import java.awt.*;
import java.beans.*;
import javax.swing.filechooser.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.util.concurrent.*;
import java.awt.event.*;

2_ بعد ذلك نقوم بانشاء فئة و ليكن باسم ImagePreviewJFileChooser
الكود:
class ImagePreviewJFileChooser extends JFrame
{

3_بداخل الفئة السابقة سنقوم بكتابة الاكواد التالية :

_ الاعلان عن الكائنات الرسومية التى سوف نستخدمها فى المثال على النحو التالى :
الكود:
class ImagePreviewJFileChooser extends JFrame
{
JLabel img;
JButton open;
JFileChooser jf = new JFileChooser();

_إنشاء المشيد
الكود:
 public ImagePreviewJFileChooser()
    {
        createAndShowGUI();
    }

_إنشاء الطريقة createAndShowGUI و التى ستحتوى على كافة التعليمات التى ستنشىء النافذة و مربع الاختيار JFileChooser


  • خصائص النافذة 

    الكود:
     setTitle("Image Preview for JFileChooser");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLayout(new FlowLayout());




  • إنشاء عنصر التسمية jlabel وتحديد حجمة 

    الكود:
     img=new JLabel();
            img.setPreferredSize(new Dimension(175,175));




  • إضافة عنصر التسمية jlabel كمكون إضافى الى مربع الاختيار مع جعله لا يقبل الا الصورة 
    الكود:
     jf.setAccessory(img);  
            jf.setAcceptAllFileFilterUsed(false);




  • فلترة الملفات بحيث لا يسمح بظهور اى ملفات اخرى غير ملفات الصورة
    الكود:
    FileNameExtensionFilter filter=new FileNameExtensionFilter("Image Files","jpg","jpeg","png","gif");
            jf.setFileFilter(filter);




  • إضافة خاصية تغيير المستمع بحيث يسمح بمعرفة الصورة المحدد عند تنقل الماوس بداخل JFileChooser على النحو التالى :
    الكود:

            jf.addPropertyChangeListener(new PropertyChangeListener(){
            
                
                public void propertyChange(final PropertyChangeEvent pe)
                {
                SwingWorker<Image,Void> worker=new SwingWorker<Image,Void>(){
                    
                 protected Image doInBackground()
                        {
                  if(pe.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY))
                            {
                            
                            File f=jf.getSelectedFile();
                            
                                try
                                {
                              
                                FileInputStream fin=new FileInputStream(f);
                                BufferedImage bim=ImageIO.read(fin);
                              
                                return bim.getScaledInstance(178,170,BufferedImage.SCALE_FAST);
                                
                                }catch(Exception e){
                                
                                    img.setText(" Not valid image/Unable to read");
                                }
                            }
                        
                        return null;
                        }
                        
                        protected void done()
                        {
                            try
                            {
                          
                            Image i=get(1L,TimeUnit.NANOSECONDS);
                            
                          
                            if(i==null) return;
                            
                          
                            img.setIcon(new ImageIcon(i));
                            }catch(Exception e){
                            
                                img.setText(" Error occured.");
                            }
                        }
                    };
                    
                
                    worker.execute();
                }
            });




الكود النهائى لعرض صورة فى مربع الاختيار JFileChooser على النحو التالى :

الكود:

import javax.swing.*;
import java.awt.*;
import java.beans.*;
import javax.swing.filechooser.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.util.concurrent.*;
import java.awt.event.*;

public class Java1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       new ImagePreviewJFileChooser();
    }
}

class ImagePreviewJFileChooser extends JFrame
{
JLabel img;
JButton open;
JFileChooser jf = new JFileChooser();

    public ImagePreviewJFileChooser()
    {
        createAndShowGUI();
    }
    
    private void createAndShowGUI()
    {
        setTitle("Image Preview for JFileChooser");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
              
        img=new JLabel();
        img.setPreferredSize(new Dimension(175,175));
        
        jf.setAccessory(img);
        jf.setAcceptAllFileFilterUsed(false);
        
        FileNameExtensionFilter filter=new FileNameExtensionFilter("Image Files","jpg","jpeg","png","gif");
        jf.setFileFilter(filter);

    
        jf.addPropertyChangeListener(new PropertyChangeListener(){
                  
            public void propertyChange(final PropertyChangeEvent pe)
            {
            SwingWorker<Image,Void> worker=new SwingWorker<Image,Void>(){
                
             protected Image doInBackground()
                    {
              if(pe.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY))
                        {
                        
                        File f=jf.getSelectedFile();
                        
                            try
                            {
                          
                            FileInputStream fin=new FileInputStream(f);
                            BufferedImage bim=ImageIO.read(fin);
                          
                            return bim.getScaledInstance(178,170,BufferedImage.SCALE_FAST);
                            
                            }catch(Exception e){
                            
                                img.setText(" Not valid image/Unable to read");
                            }
                        }
                    
                    return null;
                    }
                    
                    protected void done()
                    {
                        try
                        {
                      
                        Image i=get(1L,TimeUnit.NANOSECONDS);
                        
                      
                        if(i==null) return;
                        
                      
                        img.setIcon(new ImageIcon(i));
                        }catch(Exception e){
                        
                            img.setText(" Error occured.");
                        }
                    }
                };
                
            
                worker.execute();
            }
        });
        
      
        open=new JButton("Open File Chooser");
        add(open);
        open.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae)
            {
            
                jf.showOpenDialog(null);
            }
        });
        
        setSize(400,400);
        setVisible(true);
    }
     }
    

و النتيجة على النحو التالى :

avatar
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 372
التقيم : 24
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى