1

JPanel上でマウスをドラッグするとスクロールするハンドスクローラーを作成しようとしています。これまでのところ、ビューを変更することはできません。これが私のコードです:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class HandScroller extends JFrame {

    public static void main(String[] args) {
        new HandScroller();
    }

    public HandScroller() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);


        final JPanel background = new JPanel();
        background.add(new JLabel("Hand"));
        background.add(new JLabel("Scroller"));
        background.add(new JLabel("Test"));
        background.add(new JLabel("Click"));
        background.add(new JLabel("To"));
        background.add(new JLabel("Scroll"));

        final JScrollPane scrollPane = new JScrollPane(background);

        MouseAdapter mouseAdapter = new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                JViewport viewPort = scrollPane.getViewport();
                Point vpp = viewPort.getViewPosition();
                vpp.translate(10, 10);
                background.scrollRectToVisible(new Rectangle(vpp, viewPort.getSize()));
            }
        };

        scrollPane.getViewport().addMouseListener(mouseAdapter);
        scrollPane.getViewport().addMouseMotionListener(mouseAdapter);

        setContentPane(scrollPane);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

}

これにより、ビューが x 方向と y 方向に 10 ずつ移動すると思いますが、何もしていません。私がしなければならないことがもっとありますか?

ありがとう。

4

3 に答える 3

2

あなたのコードは機能します。単純に、ウィンドウが十分に大きいため、スクロールするものは何もありません (実際には、サブコンポーネントの優先サイズとレイアウトに合わせてpack()JFrame のサイズが変更されます) 。

その行を削除pack();して、たとえば、効果を確認するために置き換えsetSize(60,100);ます。

于 2013-05-04T19:36:48.220 に答える
1

それは働いています。ただし、このコードを実行すると、JScrollPaneすべての項目が収まる大きさになります。追加(例)

scrollPane.setPreferredSize(new Dimension(50, 50));

マウスイベントが正常に機能することがわかります。

于 2013-05-04T19:35:44.980 に答える