4

JFileChooserエクスポート機能の一部として使用しています。JFileChooserユーザーがのファイル ビューアからファイルを選択するか、ファイル名テキスト ボックスにファイル名を入力できるようにしたいと考えています。私が読んだことから、メソッドを使用してその値を取得することが可能であるため、エクスポートを実行する前にいくつかのチェックを呼び出して実行しようとするgetSelectedFile()リスナーがいくつかあります。getSelectedFile()

私が直面している問題はgetSelectedFile()、名前をファイル名テキスト ボックスに手動で入力すると、メソッドが null を返すことです。さらに混乱を招くことに、このgetSelectedFile()方法は 3 つの異なる状況で機能します。

  1. 私はそれを介して入力しsetSelectedFile()ます(ユーザーがテーブルから値をクリックし、使用しますsetSelectedFile()
  2. ファイル ビューアで既存のファイルをクリックする
  3. ファイル名のテキスト ボックスにデータを入力した後、Enter キーを押しました

3 つのファイル フィルターがありますが、それらが有効になっているかどうかに関係なく、同じ動作をしています。

呼び出すリスナーgetSelectedFile()は次のとおりです。

  • keyReleased のイベント リスナー
  • mousePressed のイベント リスナー。
  • jFileChooser の PropertyChangeEvent リスナー
  • jFileChooser のアクション リスナー

ユーザー入力を取得するために jFileChooser をリッスンするより良い方法はありますか? 非常に明白な何かが欠けているように感じます...どんな助けも大歓迎です!

編集 もう少し情報を...

にある にJFileChooserコンポーネントがJSplitPaneありJFrameます。showOpenDialogユーザーからの入力を取得するために呼び出しているわけではありません。コンポーネントは、フォームの一部としてアクセスできます。

私がやりたいことは、ユーザーが入力するときにユーザー入力を聞くことです。ユーザーがコンポーネントのファイル名テキストボックスに有効なファイル名を入力するまで無効のままにしたい「エクスポート開始」ボタンがありJFileChooserます。これを実現するために、ユーザーが入力したときにファイル名を取得するために使用したい KeyEvent リスナーがあります。

さらに編集

アクション リスナーのコードは次のとおりです。

jFileChooserExport.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jFileChooserExportActionPerformed(evt);
        }
    });

ここにもプロパティ変更リスナーがあります。

jFileChooserExport.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
        public void propertyChange(java.beans.PropertyChangeEvent evt) {
            jFileChooserExportPropertyChange(evt);
        }
    });

jFileChooserExportPropertyChange と jFileChooserExportActionPerformed の両方の内部で、getSelectedFile() を呼び出して、ユーザーが選択したファイルを取得しようとしています。ただし、どちらの場合も、ユーザーが上記の 3 つの方法のいずれかを実行するまで null のままです。

4

2 に答える 2

2

How to Use File Choosersに関する Swing チュートリアルのセクションを読んでください。そこにあるデモコードは私にとってはうまくいきます。

于 2011-02-09T16:08:57.133 に答える
0

以下のどれも機能していないように見えるため、JFileChooser にPropertyChangeListener を追加して、 SELECTED_FILE_CHANGED_PROPERTYをリッスンすることをお勧めします。


ファイル チューザーで複数選択が有効になっている可能性があります。その場合、getSelectedFilenull が返さgetSelectedFilesれますが、選択されたファイルを含む配列が返されます。複数選択を無効にするか、配列を使用することができます (ユーザーに 1 つのファイルのみを選択させたい場合は、multiSelectionEnabled を false に設定します)。

ただし、別の可能性は、選択したファイルを取得しようとしたが、まだ呼び出されていないか、返されなかったfileChooser.showOpenDialog場合です。fileChooser.showSaveDialogJFileChooser.APPROVE_OPTION

また、JFileChooser は大文字と小文字を区別すると思います。そのため、ファイル名が「Foo.bar」で「FoO.bar」と入力すると、別のものが必要であると判断されます。

于 2011-02-09T16:22:21.163 に答える