JInternalFrameのアイコン化可能/最小化機能を使用してフレームを折りたたむだけでなく、親コンポーネント内でJInternalFrameの位置を維持する必要があります。現在、JInternalFrameのminimizeボタンを押すと、コンポーネントのコンテナの下部にコンポーネントが配置されます。最小限に抑えながら場所を維持する方法はありますか?明白な解決策がない場合、どのように私はiconableアイコンを観察し、デフォルトのリスナーを削除することができますか?ありがとうございました。JInternalFrameは現在の位置を維持しながら最小化します
2
A
答えて
4
この動作を変更するには、javax.swing.DesktopManager
の実装を作成するとよいでしょう。既に利用可能な既定の動作の大部分を取得するには、javax.swing.DefaultDesktopManager
のサブクラス化をお勧めします。
DefaultDesktopManagerでは、メソッドiconifyFrame(JInternalFrame f)
は完全な動作を制御しますが、内部的にはメソッドprotected Rectangle getBoundsForIconOf(JInternalFrame f)
を使用して、最小化されるフレームのアイコンの境界を決定します。ここでは、使用したい内部フレームのアイコンの境界を返すことができます。問題はそれらの値がキャッシュされているので、次のようなことをする必要があるたびに移動したい場合です。念のため
import javax.swing.DefaultDesktopManager;
import javax.swing.DesktopManager;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Dimension;
public class CustomDesktopManager extends DefaultDesktopManager {
@Override
public void iconifyFrame(JInternalFrame f) {
super.iconifyFrame(f);
JInternalFrame.JDesktopIcon icon = f.getDesktopIcon();
Dimension prefSize = icon.getPreferredSize();
icon.setBounds(f.getX(), f.getY(), prefSize.width, prefSize.height);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JDesktopPane desktopPane = new JDesktopPane();
DesktopManager dm = new CustomDesktopManager();
desktopPane.setDesktopManager(dm);
JInternalFrame internalFrame = new JInternalFrame("Test Internal Frame", true, false, true, true);
internalFrame.setSize(200, 150);
internalFrame.setVisible(true);
desktopPane.add(internalFrame);
frame.add(desktopPane, BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setVisible(true);
}
});
}
}
0
、もしあなたは、単にそれがあなたのJInternalFrameのinternalFrameIconified()イベントを通じてで実現するために、アイコンの位置やサイズ、他の方法を変更されて欲しいもの:
public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
JInternalFrame.JDesktopIcon icon = myInternalFrame.getDesktopIcon();
icon.setSize(new Dimension(200,icon.getSize().height)); //Change icon width to 200
icon.setLocation(x,y); //You can calculate its position as you wish (not implemented here).
}
この方法DefaultDesktopManagerを拡張することなく、各JInternalFrame(またはJInternalFrameタイプ)に対して独立してルールを設定できます。しかし、あなたが望むものが一般にすべてのJInternalFramesに影響を与えることであれば、Joshuaの推奨に従うことを強くお勧めします。
関連する問題
- 1. Website Redesign現在のGoogle検索の位置を維持する
- 2. ListViewでスクロール位置を維持しながらSimpleCursorAdapterを更新します。
- 3. iphone sdkの現在の位置から最小の位置を取得した後にtableviewを再配置する方法はありますか?
- 4. リッチテキストボックスコントロールから現在のスクロール位置を取得しますか?
- 5. jqueryはモーダルダイアログのスクロール位置を維持します
- 6. JInternalFrameのフォーカスを維持する
- 7. カーソルの下の現在の列を維持しながらvimでファイルの最後に移動するには?
- 8. PHPはスクロール位置を維持します
- 9. 現在の位置ピンをアンドロイドの地図から削除する方法、他のピンを維持する
- 10. 下部(Y)位置を維持しながら形状トゥイーン/変形?
- 11. 非最小位置で収束するL1-正規化システムの最小化?
- 12. 元の位置オフセットを維持したままのテキスト操作
- 13. リストはスクロール位置を維持しません
- 14. "最小化"コントロールを維持しながらVB6でフォームのサイズ変更を無効にする
- 15. MKMapView:現在のズームレベルを現在の位置に従います
- 16. ListViewの位置を維持する
- 17. ラッピングブロックの位置を維持する
- 18. ラベルのスクロールバー位置を維持する
- 19. UITextViewで最初の行を現在のカーソル位置にしますか?
- 20. シミュレータの現在の位置
- 21. 現在のタッチ位置
- 22. AChartEngine現在の位置
- 23. Androidはリストビューで選択したアイテムの位置を維持します
- 24. openal:ソースの現在の再生位置を取得します
- 25. 現在のモニタでコンポーネントの位置を取得します
- 26. IFRAMEの現在のマウス位置を特定しますか?
- 27. Androidは現在の位置を取得
- 28. 現在位置マーカー(青丸)
- 29. Flash:同じ位置と回転を維持しながら、コンテナから別のムービークリップにムービーを移動する
- 30. MKMapViewの現在の位置を更新しません
あなたは私の人生の時間を節約しました。ありがとうございました。 –