我需要創建一個通常應用滾動條的區域,它必須水平滾動(內容只是視圖到一個更大的邏輯區域),但我必須使用一些特殊的控件向左和向右移動以便滾動。我有關於使用絕對值(根據邏輯視圖和減去一個偏移量。因此,偏移控制權將放置與負x值,從而丟棄。控制x值高於寬度將也被丟棄。沒有滾動條的可滾動區域
這是一種有效的方法?
問候 索倫
我需要創建一個通常應用滾動條的區域,它必須水平滾動(內容只是視圖到一個更大的邏輯區域),但我必須使用一些特殊的控件向左和向右移動以便滾動。我有關於使用絕對值(根據邏輯視圖和減去一個偏移量。因此,偏移控制權將放置與負x值,從而丟棄。控制x值高於寬度將也被丟棄。沒有滾動條的可滾動區域
這是一種有效的方法?
問候 索倫
您可以可以創建一個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);
}
}
哇,非常感謝你「Qwerky」,我會試試這個 - 這看起來很完美:) – 2013-04-05 11:58:12
@SoerenDalby剛更新了一個我測試過的類的代碼 – Qwerky 2013-04-05 12:00:40
嗨我現在已經實現了「Qwerky」原理,它的工作原理類似於魅力。然而,有一件事情,即我的控件的工作方式,當滾動控件上的鼠標保持按下時,用戶會希望滾動窗格滾動。 你們有沒有提示如何到達那裏? – 2013-04-09 14:31:06
還要考慮使用現有的滾動動作,如圖[這裏](http://stackoverflow.com/a/7203419/230513)。 – trashgod 2013-04-05 14:12:48