概要

JScrollPaneのスクロールを一時的に禁止します。

サンプルコード

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);
    }
  }
});
view all

解説

  • Disable Scrollingをチェックして無効状態にする
    • スクロールバーを取得し、JScrollBar#setEnabled(boolean)メソッドを使って、これを無効化
    • JScrollPane#setWheelScrollingEnabled(boolean)メソッドで、マウスホイールによるスクロールを無効化
    • JScrollPaneに配置したコンポーネントをsetEnabled(false)とし、フォーカスの移動などによるスクロールを無効化
  • Disable Scrollingをチェックして無効状態にしても実行可能な操作
    • JTableHeaderは無効にしていないので、クリックしてソートや、カラムの移動を行うことが可能
    • JScrollPaneに設定したJPopupMenuを表示することが可能
    • JTableに設定したJToolTipを表示することが可能

JDK 1.7.0で追加されたJLayerを使用して、以下のように入力を禁止する方法もあります。

参考リンク

コメント