4

JFrame に埋め込まれた JFileChooserに問題があります。テキストフィールドにファイル名または正規表現を入力して「Enter」キーを押しても何も起こりません。

入力する代わりに「開く」ボタンを使用すると機能します。この問題は、Java 7 以降、埋め込まれた JFileChooser を使用した場合にのみ発生します。JFileChooser OpenDialog では、「Enter」キーが機能します。

Nimbus のルック アンド フィールを使用すると、埋め込みでも動作しますが、他のルック アンド フィールを使用すると動作しません。

このエラーは、Windows および Linux システムのルック アンド フィール、および CrossPlatformLookAndFeel (Metal と呼ばれると思います) で再現できます。

この問題の解決策はありますか?

4

2 に答える 2

3

リターン キーを押して特定のパスとファイルを選択するだけの場合は、JFileChooser をインスタンス化した後、JDialog に次の行を追加できます。

KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
InputMap map = chooser.getInputMap(JFileChooser.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
map.put(enter, "approveSelection");

ここで、chooser は JFileChooser のインスタンスです

于 2014-08-21T13:18:27.100 に答える
2

オラクルにバグレポートを提出した後、これは本当に面倒なので、何時間も (数日かけて) 解決しようとしました。私のJFileChooserコンポーネントの使用とそれらの組み込みのshowOpenDialogなどのメソッドの違いについて、OpenJDKとOracleのソースコードを閲覧することになりました。

私たちのアプリケーションでうまく機能する信頼できる回避策があると思います。少し背景を説明します。ここでは、JPanel (GridBagLayout を使用) 内のJDialogのカスタマイズされたサブクラス内でJFileChooserコンポーネントを使用し、「システム」ルック アンド フィールを使用しています。

トリックを実行する 1 行のコードを次に示します。

dialog.getRootPane().setDefaultButton(chooser.getUI().getDefaultButton(chooser));

どこ

  • dialogは、JFileChooser コンポーネントを含むJDialogのインスタンスです
  • chooserJFileChooserのインスタンスです

上記のサンプル コードは、問題を示すコード (モーダル ダイアログを表示する直前) で使用されましたが、後でコードをダイアログ サブクラスのコンストラクターに移動して、作業を簡単にしました。JRE 1.7.0_45 の時点で、まだこの問題に直面しているため、他の誰かがこれに苦労している場合に役立つことを願っています。

于 2013-11-15T13:27:56.200 に答える