JDesktopPaneに適用するドラッグスタイルを変更する
Total: 1607
, Today: 1
, Yesterday: 4
Posted by aterai at
Last-modified:
概要
JDesktopPane
のドラッグスタイルを継続的描画モードとアウトライン描画モードで切り替えます。
Screenshot
Advertisement
サンプルコード
JDesktopPane desktop = new JDesktopPane();
// @see javax/swing/DefaultDesktopManager.java setupDragMode(...)
// desktop.putClientProperty("JDesktopPane.dragMode", "faster");
// desktop.putClientProperty("JDesktopPane.dragMode", "outline");
JRadioButton r1 = new JRadioButton("LIVE_DRAG_MODE", true);
r1.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
desktop.setDragMode(JDesktopPane.LIVE_DRAG_MODE);
}
});
JRadioButton r2 = new JRadioButton("OUTLINE_DRAG_MODE");
r2.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
}
});
View in GitHub: Java, Kotlin解説
LIVE_DRAG_MODE
JInternalFrame
の移動、リサイズを継続的に描画するMetalLookAndFeel
、WindowsLookAdnFeel
、NimbusLookAndFeel
などのデフォルト
OUTLINE_DRAG_MODE
JInternalFrame
の移動、リサイズをアウトラインのみ描画するMotifLookAndFeel
はこのOUTLINE_DRAG_MODE
のみが有効で、LIVE_DRAG_MODE
を設定しても無効
JDesktopPane#putClientProperty("JDesktopPane.dragMode", "outline")
などでドラッグスタイルを変更する方法もあるJDesktopPane
の親Window
が透明の場合はDEFAULT_DRAG_MODE
でJDesktopPane#getClientProperty("JDesktopPane.dragMode")
の値は無効JDesktopPane#getClientProperty("JDesktopPane.dragMode")
がoutline
の場合はOUTLINE_DRAG_MODE
JDesktopPane#getClientProperty("JDesktopPane.dragMode")
がfaster
の場合はFASTER_DRAG_MODE
- リサイズの場合
DEFAULT_DRAG_MODE
とFASTER_DRAG_MODE
の処理は同一 - ドラッグの場合
FASTER_DRAG_MODE
はJDesktopPane
の親Window
が透明なので再描画範囲を限定して高速化
- リサイズの場合
JDesktopPane#getClientProperty("JDesktopPane.dragMode")
がその他のnull
などの場合はJDesktopPane#getDragMode()
に従う
参考リンク
- How to Use Internal Frames (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- JDesktopPane#setDragMode(...) (Java Platform SE 8)
- JInternalFrameのリサイズ中に表示されるアウトラインを点線に変更する