JFileChooser имеет метод setUI для переопределения.JFileChooser является подклассом JComponent, который имеет этот метод.Его подпись setUI (ComponentUI) .
Я обновил свой ответ, добавив в него простое приложение для демонстрации настройки пользовательского делегата пользовательского интерфейса для моего специального подкласса средства выбора файлов.Предполагается, что вы работаете под Windows L & F, поэтому, если вы этого не сделаете, вам потребуется обновить подкласс средства выбора файлов, чтобы расширить соответствующий базовый делегат пользовательского интерфейса.Избегайте использования BasicFileChooserUI, иначе вы ничего не увидите.
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FileChooserUIExample extends JFrame {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FileChooserUIExample();
}
});
}
public FileChooserUIExample() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Show the file chooser");
final JFileChooser chooser = new MyCustomFileChooser();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
chooser.showOpenDialog(FileChooserUIExample.this);
}
});
getContentPane().add(button, BorderLayout.CENTER);
pack();
setVisible(true);
}
}
А вот и собственный класс выбора файлов.
import com.sun.java.swing.plaf.windows.WindowsFileChooserUI;
import javax.swing.JFileChooser;
public class MyCustomFileChooser extends JFileChooser {
public MyCustomFileChooser() {
super();
setUI(new CustomFileChooserUI(this));
}
public class CustomFileChooserUI extends WindowsFileChooserUI {
public CustomFileChooserUI(JFileChooser b) {
super(b);
System.out.println("Woohoo! I'm using a custom UI delegate!");
}
@Override
protected void createModel() {
// TODO Auto-generated method stub
super.createModel();
}
}
}