• 追加された行はこの色です。
  • 削除された行はこの色です。
#navi(../)
*JScrollPaneのスクロールを禁止 [#idbca416]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-10-03~
更新日:&lastmod;
#contents
**概要 [#x2b05f01]
JScrollPaneのスクロールを一時的に禁止します。
---
category: swing
folder: DisableScrolling
title: JScrollPaneのスクロールを禁止
tags: [JScrollPane, JScrollBar]
author: aterai
pubdate: 2005-10-03T10:00:11+09:00
description: JScrollPaneのスクロールを一時的に禁止します。
image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTLM6S99OI/AAAAAAAAAXM/9r2e_2JRA5g/s800/DisableScrolling.png
---
* 概要 [#summary]
`JScrollPane`のスクロールを一時的に禁止します。

http://terai.xrea.jp/swing/disablescrolling/screenshot.png
#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTLM6S99OI/AAAAAAAAAXM/9r2e_2JRA5g/s800/DisableScrolling.png)

**サンプルコード [#id62505b]
 JCheckBox b = new JCheckBox("スクロールを禁止する");
 b.addItemListener(new ItemListener() {
   public void itemStateChanged(ItemEvent ie) {
     JCheckBox box = (JCheckBox)ie.getSource();
     boolean flag = !box.isSelected();
     JScrollBar bar = scrollPane.getVerticalScrollBar();
     bar.setEnabled(flag);
     scrollPane.setWheelScrollingEnabled(flag);
     table.setEnabled(flag);
   }
 });
* サンプルコード [#sourcecode]
#code(link){{
JCheckBox check = new JCheckBox("Disable Scrolling");
check.addItemListener(new ItemListener() {
  @Override public void itemStateChanged(ItemEvent ie) {
    table.clearSelection();
    JScrollBar bar = scroll.getVerticalScrollBar();
    if (ie.getStateChange() == ItemEvent.SELECTED) {
      bar.setEnabled(false);
      scroll.setWheelScrollingEnabled(false);
      table.setEnabled(false);
    } else if (ie.getStateChange() == ItemEvent.DESELECTED) {
      bar.setEnabled(true);
      scroll.setWheelScrollingEnabled(true);
      table.setEnabled(true);
    }
  }
});
}}

-[[サンプルを起動>http://terai.xrea.jp/swing/disablescrolling/sample.jnlp]]
-[[jarファイル>http://terai.xrea.jp/swing/disablescrolling/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/disablescrolling/src.zip]]
* 解説 [#explanation]
- `Disable Scrolling`をチェックして無効状態にする
-- スクロールバーを取得し`JScrollBar#setEnabled(boolean)`メソッドを使用してこれを無効化
-- `JScrollPane#setWheelScrollingEnabled(boolean)`メソッドでマウスホイールによるスクロールを無効化
-- `JScrollPane`に配置したコンポーネントを`setEnabled(false)`とし、フォーカスの移動などによるスクロールを無効化
- `Disable Scrolling`をチェックして無効状態にしても実行可能な操作
-- `JTableHeader`は無効にしていないのでマウスクリックでのソートやドラッグによるカラムの移動が実行可能
-- `JTable`に設定した`JPopupMenu`が表示される
-- `JTable`に設定した`JToolTip`が表示される

**解説 [#m5e6b6de]
scrollPane.getVerticalScrollBar().setEnabledで、スクロールバーによるスクロールを無効にします。
* 参考リンク [#reference]
- [[JLayerで子コンポーネントへの入力を制限する>Swing/PopupMenuBlockLayer]]
-- `JDK 1.7.0`で追加された`JLayer`を使用して入力を制限する方法もある
- [[JLayerで指定したコンポーネントへの入力を禁止>Swing/DisableInputLayer]]

scrollPane.setWheelScrollingEnabledで、マウスホイールによるスクロールを無効にします。

table.setEnabledでJScrollPaneに配置したコンポーネントを無効にして、フォーカスの移動などによるスクロールが起こらないようにします。

//**参考リンク
**コメント [#v37d76ac]
* コメント [#comment]
#comment
#comment