• category: swing folder: DesktopPaneDragMode title: JDesktopPaneに適用するドラッグスタイルを変更する tags: [JDesktopPane, JInternalFrame] author: aterai pubdate: 2020-10-05T01:11:41+09:00 description: JDesktopPaneのドラッグスタイルを継続的描画モードとアウトライン描画モードで切り替えます。 image: https://drive.google.com/uc?id=1PMtf908TaQMVs_TVQ9xci89wlx7f7dda

概要

JDesktopPaneのドラッグスタイルを継続的描画モードとアウトライン描画モードで切り替えます。

サンプルコード

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の移動、リサイズを継続的に描画する
    • MetalLookAndFeelWindowsLookAdnFeelNimbusLookAndFeelなどのデフォルト
  • 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")outlineの場合はOUTLINE_DRAG_MODE
    • JDesktopPane#getClientProperty("JDesktopPane.dragMode")fasterの場合はFASTER_DRAG_MODE
    • JDesktopPane#getClientProperty("JDesktopPane.dragMode")がその他のnullなどの場合はJDesktopPane#getDragMode()に従う
    • リサイズの場合DEFAULT_DRAG_MODEFASTER_DRAG_MODEの処理は同一
    • ドラッグの場合FASTER_DRAG_MODEJDesktopPaneの親Windowが透明なので再描画範囲を限定して高速化

参考リンク

コメント