2011-12-17 9 views
8

JDesktopPaneの内部にあるアクティブな(フォーカスを持っている)フレーム(JInternalFrame)を取得する方法は?私は私のMDIメモ帳(誰もそれを使用するわけではなく、単に訓練プロジェクト)のためにそれが必要です。 APIを見ると、アクティブなものではなく、すべてのJInternalFramesを取得する関数しか表示されません。JDesktopPane - アクティブなフレームを取得する方法

答えて

10

使用JDekstopPane.getSelectedFrame()方法(DOCから:このJDesktopPaneの中に現在アクティブなJInternalFrame、または全くJInternalFrameが現在アクティブでない場合はnull)またはJDesktopPane.getAllFrames()は現在デスクトップに表示されているすべてのJInternalFramesのリストを取得し、​​方法を確認してください。

+1

ありがとうございます。あなたは本当に私を助けました。私はgetActiveFrameやgetFocusedFramのようなものを探し、getSelectedFrame;を見落としました;) –

+1

+1を使用しています。 – camickr

2

List<JInternalFrame>を作成し、それに反してisSelected()をチェックしてください。

補足:Actionを使用するこのexampleも参照して、メニューから内部フレームを選択してください。

+3

[JDesktopPane.getAllFrames()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames())は配列を返します。リストを使うのではなく、配列を反復するだけです。 –

+1

-1。 getSelectedFrame()またはgetAllFrames()のいずれかが使用されます。 – camickr

+0

それは公正な警官です。 – trashgod

2

JavaチュートリアルのHow to Use Internal Framesを見ましたか?あなたのコードではInternalFrameListenerAPI)(Tutorial)が必要で、イベントを有効/無効にするのを聞きます。 Activatedは内部フレームが一番上に来たことを意味します。非アクティブ化とは、もはや上にはないということです。 JDesktopPaneJLayeredPaneに拡張されているため、追加されたコンポーネントのzオーダーを設定することもできます。

すべてのペインでイテレートしないでください - イベントを使用してください。

イベントドリブンアプローチを使用するのではなく、何らかの理由でUIをポーリングしたい場合は、アクティブJInternalFrameを返すgetSelectedFrameを呼び出すことができます。なぜ誰もそれを言及した理由はわかりません。

+0

+1疎結合の場合+1。あなたは精緻化できますか? – trashgod

+0

@trashgod 'JInternalFrames'が作成されるので、かなり簡単です。' InternalFrameListener'は、どのフレームがアクティブであり、どちらではないかを記録するそれぞれに付けられます。ポスターがイベントを気にしない場合に、私の答えを少し更新しました。 - 'JDesktopPane'は' getSelectedFrame'メソッドを持っています。 – Paul

+0

>コードでInternalFrameListener(API)(チュートリアル)が必要で、イベントのアクティブ化/非アクティブ化をリスンします。 > Activatedは、内部フレームが一番上に来たことを意味します。非アクティブ化とは、もはや上にはないということです。 > JDesktopPaneはJLayeredPaneを拡張しているので、追加されたコンポーネントのzオーダーを設定することもできます。 " "コードをもっと混乱させずに簡単にする方法 "の別のヒント。私のコードはとてもシンプルなので、たとえJavaを使っていないとしても理解できます。 –

関連する問題