On Wed, 7 May 2025 21:08:53 GMT, Phil Race <p...@openjdk.org> wrote:

>> Because the problem is still there, and there are virtual folders on 
>> Windows. If a custom `FileSystemView` can return file names with `"<html>"` 
>> in their name, `JFileChooser` in Windows Look and Feel will render the file 
>> name as HTML.
>> 
>> Isn't it the problem that you're trying to fix?
>
> @aivanov-jdk @TejeshR13 
> This seems stalled because there are conflicting statements
> - Alexei : you can create a custom FIleSystemView on windows with <html> in 
> path names.
> - Tejesh : no you can't, or at least it doesn't work when you try to use it.
> 
> Can we please get that reconciled ?
> Tejesh pls show the code you used, and Alexei please show how you would do it.

I tried with this code snippet. 

import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileSystemView;
import java.io.File;
import java.util.Arrays;

public class VirtualFileChooser {

    public static void main(String[] args) throws 
UnsupportedLookAndFeelException, ClassNotFoundException, 
InstantiationException, IllegalAccessException {
          
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");


        SwingUtilities.invokeLater(() -> {
            JFileChooser chooser = new JFileChooser(new 
VirtualFileSystemView());

            int result = chooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {
                File selectedFile = chooser.getSelectedFile();
                System.out.println("Selected: " + 
selectedFile.getAbsolutePath());
            }
        });
    }

    static class VirtualFileSystemView extends FileSystemView {

        private final File[] roots;

        public VirtualFileSystemView() {
            // Create a dummy root folder
            String name = "<html><h1 color=#ff00ff><font face="Comic Sans 
MS">SWING ROCKS!!!111";
            roots = new File[]{new File(name)};
        }

        @Override
        public File createNewFolder(File containingDir) {

            File folder = new File(containingDir, "New Folder");
            folder.mkdir();
            return folder;
        }

        @Override
        public File[] getRoots() {
            return roots;
        }

        @Override
        public File getHomeDirectory() {
            return roots[0];
        }

        @Override
        public File getDefaultDirectory() {
            return roots[0];
        }

        @Override
        public File[] getFiles(File dir, boolean useFileHiding) {
            // Simulate a virtual folder structure
            return new File[]{
                    new File(dir, "virtualFile1.txt"),
                    new File(dir, "virtualFile2.txt"),
                    new File(dir, "virtualFolder")
            };
        }

        @Override
        public boolean isRoot(File file) {
            return Arrays.asList(roots).contains(file);
        }

        @Override
        public Boolean isTraversable(File f) {
            return true;
        }
    }
}

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2078849056

Reply via email to