2011-06-20 15 views
3

私は、ウィンドウ内にコンポーネントを追加することなく、Javaでウィンドウのタイトルを変更できるようにしようとしています。私は実際にJInternalFrameでこれを試していますが、解決方法はJFrameで似ているはずです。ウィンドウタイトルバーを右クリックしたときにポップアップするコンテキストメニューに、追加のメニュー項目を追加するだけです。例えば、設定するタイトルの下カスタムJavaウィンドウのタイトルバーメニュー

enter image description here

この例では、Windows XP上で、おそらくSystemTray.getSystemTray()(しかし、個々のウィンドウのためのに独立して、おそらく似たウィンドウのコンテキストメニューのOSを取得する方法はありますアプリケーション内で)。これから私は自分のActionListenerを提供して、ユーザーが新しいタイトルを入力するためのダイアログをポップアップすることができます。

これは私が推測しているよりもはるかに大きな仕事ですか?誰も以前に使ったソリューションを持っていますか?

+1

ネイティブOSのため、このfuncionalialityの欠点は、あなたは、WindowsListenerをoverode DefalutCloseOperation.NOTHING_ON_CLOSEを変更し、カスタムJMenuのとJMenuItesを使って、JDialogを作成し、基本的に何がウィンドウの閉じるイベント – mKorbel

答えて

2

短い回答:これは簡単ではないと思います。私はそれが可能なら100%確実ではない。

まず、JFrameとJInternalFrameは実際にはかなり異なっています。 JFrameはトップレベルのコンポーネントで、タイトルバーなどは通常OSによって提供されます。 JInternalFrameの全コンテンツ(タイトルバーを含む)は、Swing LAFによって提供されます。

JInternalFrameの場合、コンテキストメニューはJInternalFrame自体ではなく、LAFによって提供されます。コンテキストメニューを変更するには、UIComponentで何かする必要があります。私はあなたがこれを行うためにカスタムUIコンポーネントを提供しなければならない可能性が高いと思います。これは醜いもので、通常は別のLAFや作品を破壊しますが、ひどいものです。 BasicInternalFrameTitlePanecreateSystemMenuメソッドを参照してください。

+0

1の左上のウィンドウコンテナにこのJDialogのを配置する必要があります私は「深く掘る」ことを意味しました。精巧なおかげで:) – vehk

1

私はSwingの内部UIシステムを深く掘り下げずにはこれが可能ではないと思いますが、これを行うことは考慮しません。あなたはJMenuBarJInternalFrameを組み込みませんか?

myInternalFrame.setJMenuBar(myMenuBar); 
関連する問題