Swingでは、JScrollPaneを使うことで画面に収まらない領域をスクロールさせて表示することができる。
使い方は簡単で、JScrollPaneのコンストラクタにスクロールさせたいJComponentを渡すだけである。
スクロール対象のJComponentにはあらかじめsetPreferredSize()メソッドでスクロールが開始する大きさを指定しておく。
JScrollPaneが指定した大きさよりも小さくなるとスクロールバーが自動的に表示される。
※もちろん、スクロールバーの表示/非表示は設定できる。
JScrollPaneの使用例
final MyComponent mc = new MyComponent (); mc.setPreferredSize(new Dimension(400,600)); // スクロールペインを作成する // 常にスクロールバーを表示する設定 final JScrollPane sp = new JScrollPane( myComponent, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
以前に作った、ドラッグで絵を書くプログラムに組み込んでみた。
public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final JFrame frame = new JFrame(); frame.setBounds(100, 100, 400, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // MyCanvasはJComponentを継承したクラスで // マウスをドラッグすると軌跡が描かれる。ソースは以前の記事を参照のこと。 final MyCanvas mc = new MyCanvas(); mc.setPreferredSize(new Dimension(400,600)); final JScrollPane sp = new JScrollPane( mc, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS ); frame.getContentPane().add(sp); frame.setVisible(true); } }); } }
このようにスクロールバーが表示されるようになった。