4

フォルダを選択するための JFileChooser を作成しようとしています。この FileChooser では、ユーザーが新しいフォルダーを作成し、それを選択できるようにしたいと考えています。JFileChooser の「保存」ダイアログにはデフォルトで「新しいフォルダ」ボタンがありますが、「開く」ダイアログには同様のボタンが表示されません。「開く」ダイアログに「新しいフォルダ」ボタンを追加する方法を知っている人はいますか?

具体的には、このコードを使用して作成されたダイアログにボタンを追加したいと思います。

            JFrame frame = new JFrame();

            JFileChooser fc = new JFileChooser();

            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            fc.setFileFilter( new FileFilter(){
                @Override
                public boolean accept(File f) {
                    return f.isDirectory();
                }
                @Override
                public String getDescription() {
                    return "Any folder";
                }
            });

            fc.setDialogType(JFileChooser.OPEN_DIALOG);
            frame.getContentPane().add(fc);

            frame.pack();
            frame.setVisible(true);
4

1 に答える 1

4

Ok。最後に、「開く」ダイアログの代わりに「保存」ダイアログを使用してこれを解決しました。標準の保存ダイアログにはすでに「新しいフォルダー」ボタンがありますが、上部に「名前を付けて保存」パネルもありますが、これは望ましくありませんでした。私の解決策は、標準の保存ダイアログを使用することでしたが、「名前を付けて保存」パネルを非表示にしました。

保存ダイアログのコードは次のとおりです。

            JFrame frame = new JFrame();

            JFileChooser fc = new JFileChooser();

            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            fc.setFileFilter( new FileFilter(){

                @Override
                public boolean accept(File f) {
                    return f.isDirectory();
                }

                @Override
                public String getDescription() {
                    return "Any folder";
                }

            });

            fc.setDialogType(JFileChooser.SAVE_DIALOG);
            fc.setApproveButtonText("Select");

            frame.getContentPane().add(fc);


            frame.setVisible(true);

この部分は、[名前を付けて保存:] パネルを見つけて非表示にします。

            ArrayList<JPanel> jpanels = new ArrayList<JPanel>();

            for(Component c : fc.getComponents()){
                if( c instanceof JPanel ){
                    jpanels.add((JPanel)c);
                }
            }

            jpanels.get(0).getComponent(0).setVisible(false);

            frame.pack();

最終結果:

ここに画像の説明を入力

編集

このソリューションには、現在ディレクトリが選択されていないときにユーザーが承認ボタンを押した場合に表示される奇妙な点が 1 つあります。この場合、チューザーによって返されるディレクトリは、ユーザーが表示していたディレクトリに対応し、(非表示の)「名前を付けて保存:」パネル内のテキストと連結されます。結果のディレクトリは、存在しないディレクトリである可能性があります。以下のコードでこれを処理しました。

                    File dir = fc.getSelectedFile();
                    if(!dir.exists()){
                        dir = dir.getParentFile();
                    }
于 2012-12-09T19:03:15.993 に答える