2013-07-13 5 views
6

ファイルのデフォルトシステムアイコンを表示する方法JFileChooserJFileChooserのファイルのアイコンは、デスクトップとエクスプローラに表示されるアイコンと同じにする必要がありますか?JFileChooserでファイルのデフォルトのシステムアイコンを表示する方法は?

たとえば、NetBeansアイコンはデスクトップに表示されているようにJFileChooserに表示されません。

これを行う方法?

+0

[受け入れる]にしてください(http://meta.stackexchange.com/a/65088/155831)、それは問題を解決する助けた場合の答え。 [以前の質問](http://stackoverflow.com/users/2534090/javatechnical?tab=questions)の多くで同じことが言えるかもしれません。もちろん、答えのないページにあることに気づいたら、それを削除する(または削除のためにフラグを立てる)という選択肢が常にあります。 –

答えて

7

我々はFileSystemViewクラスを使用して、それでgetFileSystemView()静的メソッドを呼び出すことによって、それのオブジェクトを取得し、その後Fileオブジェクトを取り、それのアイコンを返すgetSystemIcon()方法を使用することができます。

FileSystemViewおよびFileViewクラスは、javax.swing.filechooserパッケージに存在します。 Fileクラスはjava.ioパッケージに含まれています。

注:FileSystemViewは、FileViewを拡張しません。したがって、あなたは、現在のフレームを表しjf.setFileView()

JFileChooser jf=new JFileChooser(); 
jf.setFileView(new MyFileView()); 
jf.showOpenDialog(this); 

class MyFileView extends FileView 
{ 
     public Icon getIcon(File f) 
     { 
     FileSystemView view=FileSystemView.getFileSystemView(); 
      return view.getSystemIcon(f); 
     } 
} 

thisFileSystemViewオブジェクトを使用することはできません。このコードが書き込まれたクラスは、@JavaTechnicalで示す

jf.setFileView(new FileView(){ 
      public Icon getIcon(File f) 
      { 
       return FileSystemView.getFileSystemView().getSystemIcon(f); 
      } 
     }); 
+3

コミュニティとの共有+1: –

+0

ありがとう@Baadshah :) – user12458

6

方法は、一方向JFrame

または単純な方法でのサブクラスであると仮定する。ここに別の(より簡単な)方法があります。 GUI(または少なくともファイルチューザ)をネイティブPLAFに設定します。例えば。もちろん

File chooser with native PLAF

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class FileChooserIcons { 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName()); 
       } catch(Exception e) { 
        e.printStackTrace(); 
       } 
       // the GUI as seen by the user (without frame) 
       JPanel gui = new JPanel(new BorderLayout()); 
       gui.setBorder(new EmptyBorder(20, 30, 20, 30)); 

       JButton browse = new JButton("Show File Chooser"); 
       final JFrame f = new JFrame("File Chooser"); 
       ActionListener showChooser = new ActionListener() { 

        JFileChooser jfc = new JFileChooser(); 

        @Override 
        public void actionPerformed(ActionEvent e) { 
         jfc.showOpenDialog(f); 
        } 
       }; 
       browse.addActionListener(showChooser); 
       gui.add(browse); 

       f.add(gui); 
       // Ensures JVM closes after frame(s) closed and 
       // all non-daemon threads are finished 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       // See http://stackoverflow.com/a/7143398/418556 for demo. 
       f.setLocationByPlatform(true); 

       // ensures the frame is the minimum size it needs to be 
       // in order display the components within it 
       f.pack(); 
       // should be done last, to avoid flickering, moving, 
       // resizing artifacts. 
       f.setVisible(true); 
      } 
     }; 
     // Swing GUIs should be created and updated on the EDT 
     // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html 
     SwingUtilities.invokeLater(r); 
    } 
} 

あなたは勇敢な感じている場合、あなたはFile Browser GUIのようなもので始まるカスタムファイルチューを作成することがあります。

+0

Hmm。それはいいです!もし私がルックアンドフィールを変えたいのであれば、NimbusLookAndFeelが大好きです! ;) – user12458

+3

@JavaTechnical * "NimbusLookAndFeelが大好き" *あなたはバグが大好きですか?ニンバスはこれまでに開発されたバグの最も蔓延したPLAFの1つです。 ..そして、それは何かを言っている! –

+0

+1 OK。ちなみに、見た目の仕方やカスタマイズ方法については、どのように感じますか? :) – user12458

関連する問題