一般我们要实现文件预览或者图片预览,都是通过setAccessory()来实现的。 但是我现在做的这个swing程序,要求在对话框的最低部将文件的描述显示一下,我觉得这样可能就必须继承JFileChooser了吧, 但是swing的源代码我找不到,请教各位高手,请给出建议。当然,给出代码更是感激不尽。  

解决方案 »

  1.   

    还有一个问题,怎么才能得到JFileChooser的源代码呢,我试着反编译JFileChooser.class, 可是不行, 谢谢大家 !!!
      

  2.   

    JSDK 有源麻啊,Eelipse可以查看
      

  3.   

    在jdk安装目录下有一个src.rar的源代码压缩包。
      

  4.   

    谢谢!!!!!!
    我找到源码了,可是感觉JFileChooser的界面被封装了,想加一个自己的JTextArea在下面可能不太容易,大家有好办法么?
      

  5.   

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.io.File;
    import java.util.Date;import javax.swing.*;
    public class T
    {
    public static void main(String[] args)
    {
    final JFileChooser jfc = new JFileChooser();
    jfc.setMultiSelectionEnabled(false);
    jfc.setControlButtonsAreShown(false);

    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 10));
    JButton okBtn = new JButton("确定");
    JButton cancelBtn = new JButton("取消");
    buttonPanel.add(okBtn);
    buttonPanel.add(cancelBtn);

    final JTextArea textArea = new JTextArea(5, 10);
    textArea.setEditable(false);
    JScrollPane textAreaSp = new JScrollPane(textArea);
    JPanel prevPanel = new JPanel(new BorderLayout());
    prevPanel.add(textAreaSp, BorderLayout.CENTER);
    prevPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));

    jfc.addPropertyChangeListener(new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent e)
    {
      String prop = e.getPropertyName(); 
      if(prop == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) { 
      File file = (File) e.getNewValue();
      if (file == null || file.isDirectory()) {
      textArea.setText("");
      }
      else {
      String desc = "Name: " + file.getName() + "\n" +
                    "Size: " + file.length() + " Bytes \n" +
                    "Time: " + new Date(file.lastModified());
      textArea.setText(desc);
      }
      } 
    }
    });

    final JFrame f = new JFrame();
    okBtn.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    f.dispose();
    System.out.println(jfc.getSelectedFile());
    }
    });

    cancelBtn.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    f.dispose();
    }
    });

    f.getContentPane().add(jfc, BorderLayout.NORTH);
    f.getContentPane().add(prevPanel, BorderLayout.CENTER);
    f.getContentPane().add(buttonPanel, BorderLayout.SOUTH); f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);

    }
    }