我的框架为100x100,图像为400x400,整个框架上有一个分层窗格,分层窗格内有图像。您可以注意到图像比帧大,因此只显示图像的一部分,即图像的左上部分。假设图像中有一个人在X = 32和y = 40,宽度= 10,高度= 10(基本上是一个矩形)w.r.t.框架。
答案 0 :(得分:3)
第1点)我猜你是将图片添加到JPanel
然后添加到JFrame
或图片添加到JPanel
进入JScrollPane
最终落在JFrame
内。 JPanel
和JScrollPane
都支持使用#scrollRectToVisible进行程序化滚动。
这是scrollRectToVisible
的(种类)工作样本JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(200, 11000));
SpringLayout layout = new SpringLayout();
panel2.setLayout(layout);
for (int i = 0; i < 100; i++) {
JLabel textField = new JLabel();
textField.setText("textfield number " + i);
textField.setPreferredSize(new Dimension(150, 100));
layout.putConstraint(SpringLayout.NORTH, textField, i * 110, SpringLayout.NORTH, panel2);
panel2.add(textField);
}
JScrollPane scrollPane = new JScrollPane(panel2, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(200, 500));
panel2.scrollRectToVisible(new Rectangle(0, 800, 150, 100));
panel.add(scrollPane);
将面板变量添加到JFrame中,您可以运行此代码。此外,请注意,这是示例代码,而不是为了向面板添加组件而编写代码的实际方式:P
第2点)我仍然不完全理解这个查询,所以我将分两部分给你答案。
a)我不明白为什么相对计算很重要?你能试试我提供的样品,看看它是否能满足需要吗?如果没有,请阅读选项b
b)Rectangle
对象有一个setLocation(int, int)
(参考:Java documentation),你应该玩。我不能给你一个更准确的答案或代码样本,因为我不完全理解你正在尝试做什么,而且我没有可以使用的代码示例。