1

通常はスクロールバーを適用する領域を作成する必要があり、水平方向にスクロールする必要があります (コンテンツは、より大きな論理領域へのビューにすぎません)。ただし、コントロールの左右に配置された特別なコントロールを使用する必要があります。スクロールする順番。

絶対値を使用することについて考えました (論理ビューに従って、オフセットを減算します。したがって、オフセットの右にあるコントロールは負の x 値で配置され、破棄されます。幅を超える x 値を持つコントロールも破棄されます。

これは有効なアプローチですか?

宜しくお願いします

4

1 に答える 1

2

JScrollPaneオーバーComponent(より大きな論理領域) を作成し、スクロールバーを削除できます。

次に、左右にスクロールするボタンを追加できます。これらのボタンをクリックすると、スクロールペインのビューが移動します。これは、ビューの絶対位置を設定することによって行われます。最初にビューの絶対位置を取得し、次にそれを増減して再度設定することで、これを相対的にすることができます。

より大きな画像のスクロール可能なウィンドウを表示するクラスを次に示します。

public class ViewScroller {

  public ViewScroller() {
    JFrame frame = new JFrame("ViewScroller");
    final ImageIcon image = new ImageIcon("path\\to\\my\\image");
    JLabel label = new JLabel(image);
    final JScrollPane scrollPane = new JScrollPane(label);
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

    JButton left = new JButton("<");
    left.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Point p = scrollPane.getViewport().getViewPosition();
        p.x = p.x < 10 ? 0 : p.x - 10;
        scrollPane.getViewport().setViewPosition(p);
      }
    });

    JButton right = new JButton(">");
    right.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Point p = scrollPane.getViewport().getViewPosition();
        int offset = p.x + scrollPane.getViewport().getWidth();
        p.x = offset + 10 > image.getIconWidth() ? p.x : p.x + 10;
        scrollPane.getViewport().setViewPosition(p);
      }
    });

    frame.add(right, BorderLayout.EAST);
    frame.add(left, BorderLayout.WEST);
    frame.add(scrollPane, BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setVisible(true);
  }
}
于 2013-04-05T11:39:14.787 に答える