2015-02-17 63 views
1

我試圖獲取與特定文件關聯的縮略圖,然後調整其大小。我一直在Mac上進行測試,並且一直沒有找到能夠實現這一目標的解決方案。Java - 獲取文件縮略圖和調整大小

到目前爲止的代碼:

得到縮略圖的
import com.apple.laf.AquaIcon; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 


public class TestSystemIcon extends JFrame 
{ 

JPanel panel; 
ImageIcon icon; 
public TestSystemIcon() 
{ 

    panel = new JPanel(); 
    JButton button = new JButton("Open..."); 
    final JLabel label = new JLabel(); 
    icon = null; 
    final JPanel en = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
    label.setHorizontalAlignment(SwingConstants.CENTER); 
    button.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      JFileChooser fileChooser = new JFileChooser(); 
      if(fileChooser.showOpenDialog(null) == JFileChooser.OPEN_DIALOG) 
      { 
       File file = fileChooser.getSelectedFile(); 
       icon = resizeIcon(getThumbnail1(file),200,200); 
//     icon = resizeIcon(getThumbnail2(file),200,200); 
       System.out.println(icon); 
       label.setIcon(icon); 
       en.add(label); 
       revalidate(); 
       repaint(); 

      } 
     } 
    }); 

    panel.add(button); 
    this.add(panel,BorderLayout.NORTH); 
    this.add(en,BorderLayout.CENTER); 

    this.setSize(400,400); 
    this.setLocationRelativeTo(null); 
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
} 


public ImageIcon getThumbnail1(File file) 
{ 
    JFileChooser f = new JFileChooser(); 
    Icon i = f.getIcon(file); 
    //Mac Conversion. 
    Image image = AquaIcon.getImageForIcon(i); 
    return new ImageIcon(image); 
} 

public ImageIcon getThumbnail2(File file) 
{ 
    return new ImageIcon(file.getPath()); 
} 

public ImageIcon resizeIcon(ImageIcon imageIcon,int width, int height) 
{ 
    return new ImageIcon(imageIcon.getImage().getScaledInstance(width,height,Image.SCALE_SMOOTH)); 
} 


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

版本1有以下行爲:

  • 可以打開縮略圖
  • 很小,比例不太合適。越來越縮略圖

版本2有以下行爲:

  • 不顯示圖像,儘管發現圖像(System.out的證明了這一點)。 除pdf外,其中顯示的是實際文件,而不是 縮略圖
  • 當它工作時,即PDF,它可以很好地縮放。

我知道我可以使用sun.awt.shell.ShellFolder;,但我的目標是跨平臺解決方案。

感謝所有幫助

回答

1

我看了一些代碼,我在過去所做的那樣,似乎當您使用的JLabel與和ImageIcon的這個工作正常,試試這個代碼,調整大小大的圖像爲100x100,

ImageIcon icon = new ImageIcon("Penguins.jpg"); 
Image img = icon.getImage().getScaledInstance(100,100,Image.SCALE_SMOOTH); 

// if the file is not an image, but a file on the system, 
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(file); 
Image img = ((ImageIcon) icon).getImage().getScaledInstance(100,100,Image.SCALE_SMOOTH); 

ImageIcon icon1 = new ImageIcon(img); 
JLabel image = new JLabel(icon1); 
+0

感謝您的回覆,但其目的是獲取任何文件的縮略圖,而不是圖像。即如果我打開一個docx文件,我會得到微軟Word的縮略圖圖標 – 2015-02-18 08:21:18

+0

@ EII_18,我發現了一個重複的帖子,解決圖標問題,但沒有重新調整圖像問題,看看http://stackoverflow.com/questions/1498506/java-howto-get-thumbnail-from-a-file我試過了它的工作邏輯,但是如果你需要重新設置圖標,請使用我的答案 – faljbour 2015-02-18 21:09:53

+0

中的邏輯我更新了答案以顯示信息從1498506提供。 – faljbour 2015-02-18 21:19:13

相關問題