2013-07-13 9 views
6

Jak wyświetlić domyślną ikonę systemu dla plików w numerze JFileChooser? np. ikony plików w numerze JFileChooser powinny być takie same jak ikony wyświetlane na pulpicie i eksploratorze?Jak wyświetlić domyślną ikonę systemu dla plików w JFileChooser?

Na przykład ikona NetBeans nie pojawi się w wersji JFileChooser tak samo jak na pulpicie!

Jak to zrobić?

+0

proszę [przyjąć] (http://meta.stackexchange.com/a/65088/155831) odpowiedź czy to pomogło rozwiązać problem. To samo można powiedzieć o wielu [wcześniejszych pytaniach] (http://stackoverflow.com/users/2534090/javatechnical?tab=questions). Oczywiście, zauważając tę ​​na tej stronie bez odpowiedzi, zawsze istnieje możliwość jej usunięcia (lub oznaczania jej do usunięcia). –

Odpowiedz

7

Możemy użyć klasy FileSystemView i dostać go za obiekt wywołując getFileSystemView() statycznej metody w nim, a następnie użyć metody getSystemIcon() która przyjmuje File obiekt i zwraca ją za ikonę.

FileSystemView i FileView klasy są dostępne w pakiecie javax.swing.filechooser. File klasa znajduje się w pakiecie java.io.

Uwaga:FileSystemView nie obejmuje FileView. Stąd nie można używać FileSystemView obiekt w 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); 
     } 
} 

this reprezentuje bieżącą klatkę. Załóżmy, że klasa, w której ten kod jest napisany jest sub klasa JFrame

lub w prosty sposób,

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

+1 za udostępnienie społeczności :) –

+0

Dzięki @Baadshah :) – user12458

6

sposób pokazany przez @JavaTechnical jest jeden sposób. Oto inny (łatwiejszy) sposób. Ustaw GUI (lub przynajmniej wybieracz plików) na natywny PLAF. NA PRZYKŁAD.

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); 
    } 
} 

Oczywiście, jeśli czujesz się odważny, można utworzyć niestandardowy plik Chooser wychodząc z czymś takim jak File Browser GUI.

+0

Hmm. To jest dobre! Co jeśli chcę zmienić wygląd i styl, powiedzmy, że kocham NimbusLookAndFeel! ;) – user12458

+3

@JavaTechnical * "Kocham NimbusLookAndFeel" * Kochasz błędy? Nimbus jest jednym z najczęściej przenoszonych przez bug PLAF-ów, jaki kiedykolwiek opracowano. .. I to mówi coś! –

+0

+1 OK. Przy okazji, co myślisz o tym, jak wygląda i jak można go dostosować? :) – user12458

Powiązane problemy