概要

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_MODEJDesktopPane#getClientProperty("JDesktopPane.dragMode")の値は無効
    • JDesktopPane#getClientProperty("JDesktopPane.dragMode")outlineの場合はOUTLINE_DRAG_MODE
    • JDesktopPane#getClientProperty("JDesktopPane.dragMode")fasterの場合はFASTER_DRAG_MODE
      • リサイズの場合DEFAULT_DRAG_MODEFASTER_DRAG_MODEの処理は同一
      • ドラッグの場合FASTER_DRAG_MODEJDesktopPaneの親Windowが透明なので再描画範囲を限定して高速化
    • JDesktopPane#getClientProperty("JDesktopPane.dragMode")がその他のnullなどの場合はJDesktopPane#getDragMode()に従う

参考リンク

コメント