2

我有一个 100x100 的框架和一个 400x400 的图像,我在整个框架上有一个分层窗格,并且在分层窗格内有一个图像。正如您所注意到的,图像比框架大,因此只会显示图像的一部分,即图像的左上部分。假设图像中有一个人在 X=32 和 y=40 并且宽度 = 10 和高度 = 10(基本上是一个矩形)wrt 框架。

问题

  1. 图片是400x400吧?这意味着在运行时我只能看到图像的 100x100 部分,而已显示的图像部分是左上角,对吧?但是假设我想在图像中显示位于 350x350 的建筑物,那么我该怎么做(因为它位于图像的底部,所以不会显示)?
  2. 假设第一个问题已解决,然后假设在 350x350 处有一栋宽度 = 20 且高度 = 20 的“框架”建筑物。现在,当我在运行时显示图像时(现在图像的底部可见,假设问题 1 已解决),建筑物框架的坐标不应改变,即它们应保持 350x350 框架。
4

1 回答 1

3

第 1 点)我猜你是在 a 中添加图像,JPanel然后将图像添加到 a 中,然后JFrame将图像添加JPanel到 a 中JScrollPane,最后落在JFrame. JPanels 和s 都支持通过使用#scrollRectToVisibleJScrollPane进行编程滚动。

这是 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);

将 panel 变量添加到 JFrame 中,您就可以运行此代码了。另外,请注意,这只是示例代码,而不是应编写代码以将组件添加到面板的实际方式:P

第2点)我仍然不完全理解这个查询,所以我会分两部分给你答案。a)我不明白为什么相对计算很重要?你能试试我提供的样本,看看它是否能满足需要吗?如果没有,请阅读选项 b b) 该Rectangle对象有一个setLocation(int, int)(参考:Java 文档),您应该使用它。我无法为您提供更准确的答案或代码示例,因为我不完全了解您要做什么,而且我没有可以使用的代码示例。

于 2012-09-09T15:24:25.987 回答