JDesktopPaneに適用するドラッグスタイルを変更する
Total: 2047, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JDesktopPaneのドラッグスタイルを継続的描画モードとアウトライン描画モードで切り替えます。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
LIVE_DRAG_MODEJInternalFrameの移動、リサイズを継続的に描画するMetalLookAndFeel、WindowsLookAdnFeel、NimbusLookAndFeelなどのデフォルト
OUTLINE_DRAG_MODEJInternalFrameの移動、リサイズをアウトラインのみ描画する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_MODEJDesktopPane#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()に従う
Reference
- How to Use Internal Frames (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- JDesktopPane#setDragMode(...) (Java Platform SE 8)
- JInternalFrameのリサイズ中に表示されるアウトラインを点線に変更する