일반적으로 스크롤 막대를 적용 할 영역을 만들어야합니다. 가로로 스크롤해야합니다 (내용은 더 큰 논리 영역에 대한 뷰일뿐입니다).하지만 몇 가지 특수 컨트롤을 배치해야합니다. 좌우로 스크롤하여 스크롤 할 수 있습니다.스크롤바가없는 스크롤 가능 영역
논리적보기에 따라 오프셋을 뺍니다. 따라서 오프셋에 대한 컨트롤은 음수 x 값으로 배치되어 폐기됩니다. 너비가 x 값 이상인 컨트롤은 또한 폐기.
이 올바른 방법인가?안부 제작 : Soeren
일반적으로 스크롤 막대를 적용 할 영역을 만들어야합니다. 가로로 스크롤해야합니다 (내용은 더 큰 논리 영역에 대한 뷰일뿐입니다).하지만 몇 가지 특수 컨트롤을 배치해야합니다. 좌우로 스크롤하여 스크롤 할 수 있습니다.스크롤바가없는 스크롤 가능 영역
논리적보기에 따라 오프셋을 뺍니다. 따라서 오프셋에 대한 컨트롤은 음수 x 값으로 배치되어 폐기됩니다. 너비가 x 값 이상인 컨트롤은 또한 폐기.
이 올바른 방법인가?안부 제작 : Soeren
당신은 Component
(당신의 큰 논리적 영역)를 통해 JScrollPane
를 작성하고 스크롤바를 제거 할 수 있습니다.
그런 다음 단추를 추가하여 왼쪽과 오른쪽으로 스크롤 할 수 있습니다. 이 버튼을 클릭하면 스크롤 패널의보기가 이동합니다. 이것은 뷰의 절대 위치를 설정하여 수행됩니다. 먼저보기의 절대 위치를 얻은 다음 다시 증가/감소시키고 다시 설정하여이 상대적으로 만들 수 있습니다.
큰 이미지를 스크롤 할 수있는 창을 보여주는 클래스입니다.
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"고맙습니다. 이걸 시험해 보겠습니다. -이게 완벽 해 보입니다. :) –
@SoerenDalby가 방금 테스트 한 수업 코드로 업데이트했습니다. – Qwerky
안녕하세요. 이제 Qwerky 원칙을 구현했으며 매력. 그러나 내 컨트롤이 작동하는 한 가지가 있습니다. 사용자는 스크롤러 컨트롤에서 마우스를 계속 누르고있을 때 스크롤 패널을 스크롤 할 것으로 예상합니다. 당신은 거기에 도착하는 방법에 대한 힌트를 가지고 있습니까? –
[여기] (http://stackoverflow.com/a/7203419/230513)와 같이 기존의 스크롤 동작을 사용해보십시오. – trashgod