swingコンポーネント->JViewport

JViewportはビューの特定の領域を表示する「窓」を提供します。
ビューポートに表示されるビューの位置を操作して別の領域を表示させることもできます。
JViewportクラスは直接インスタンスを生成して使用することはあまりありませんが、Swingのスクロール機能の基本的なコンポーネントになります。
上下左右のボタンでビューの位置をスクロールすることができます。
ビューには画像が設定されたJLabelが設定されています。
 
     
上ボタンを2回、左ボタンを3回押した時の状態です。  

コンストラクタ
JViewport()
 JViewportオプジェクトを生成します。
 (引数なしのコンストラクタひとつのみです。)
メソッド(抜粋)
void setViewPosition(Point p)
 ビューポートの左上角の座標を設定します。
Point getViewPosition()
 ビューポートの左上角の座標を返します。
void setView(Component com)
 comをビューポートのビューとして設定します。
Dimension getExtentSize()
 ビューの可視部分のサイズを返します。
Dimension getViewSize()
 ビューの現在のサイズを返します。
 ビューのサイズが明示的に設定されていない場合は、適切なサイズを返します。
void setViewSize(Dimension size)
 ビューのサイズを設定します。
void setScrollMode(int mode)
 ビューポートのスクロールを行うモードを設定します。
JViewport.BLIT_SCROLL_MODE (デフォルト) graphics.copyArea()を使用してスクロールを実装します。この設定がスクロールの速度が上がります。
JViewport.BACKINGSTORE_SCROLL_MODE オフスクリーンイメージに描画します。
JViewport.SIMPLE_SCROLL_MODE スクロールするたびに、全コンテンツを再描画します。

クリック

SampleView.java
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
public class SampleView extends JFrame implements ActionListener{  
   Container contentPane;  
    String str[] = { "上","下","左","右"};  
   JButton btn[] = new JButton[str.length];  
   JPanel btnPnl = new JPanel();  
   JLabel lbl = new JLabel();  
   JViewport view = new JViewport(); ← @インスタンス生成
  public SampleView() {  
      super("SampleView");  
     addWindowAdapter(new WindowListener() {  
       public void windowClosing(WindowEvent e) {  
          System.exit(0);  
       }  
     });  
     contentPane = getContentPane();  
     contentPane.setLayout(new BorderLayout());  
      lbl = new JLabel(new ImageIcon("kozi.gif"));  
     view.setView(lbl); ← Aビューの設定
     btnPnl.setLayout(new FlowLayout());  
      for(int i=0; i<str.length; i++){  
         btn[i] = new JButton(str[i]);  
         btn[i].addActionListener(this);  
         btnPnl.add(btn[i]);  
      }  
      contentPane.add("Center",view);  
      contentPane.add("North",btnPnl);  
     setSize(250,250);  
     setVisible(true);  
   }  
  }  
  public void actionPerformed(ActionEvent e){  
     Object ojt = e.getSource();  
     Point point = view.getViewPosition(); ← B座標の取得
      for(int i=0; i<str.length; i++){  
          if(ojt==btn[0]){  
              point.y += 5; ← Cy座標の増加
          } else if(ojt==btn[1]){  
              point.y -= 5; ← Cy座標の減少
          } else if(ojt==btn[2]){  
              point.x += 5; ← Cx座標の増加
          } else if(ojt==btn[3]){  
              point.x -= 5; ← Cx座標の減少
          }  
       }  
       view.setViewPosition(point); ← D座標の設定
    }  
  public static void main(String[] args) {  
    SampleView myClass = new SampleView();  
  }  
}  
@JViewport view = new JViewport();
 
JViewportのインスタンスを生成しています。
Aview.setView(lbl);
 ビューポートのビューにラベル(lbl)を設定しています。ラベルには画像が設定されています。
BPoint point = view.getViewPosition();
 ビューの現在の位置(左上角の座標)を取得しています。
Cpoint.y += 5; (座標の値の増加又は減少)
 Bで取得した座標の値を増加、又は減少させています。
ビューを上に移動 ・・・ y座標を増加させる
ビューを下に移動 ・・・ y座標を減少させる
ビューを左に移動 ・・・ x座標を増加させる
ビューを右に移動 ・・・ x座標を減少させる
Dview.setViewPosition(point);
 ビューの位置をpointの座標の位置に設定しています。
  ※swingの座標システムはコンポーネントの左上角を原点(0,0)としています。
   X座標は右に向かって、Y座標は下に向かって大きくなります。
もどる