在有限的空间中显示图像的特定部分?

时间:2012-09-09 15:12:49

标签: java image swing jframe jscrollpane

我的框架为100x100,图像为400x400,整个框架上有一个分层窗格,分层窗格内有图像。您可以注意到图像比帧大,因此只显示图像的一部分,即图像的左上部分。假设图像中有一个人在X = 32和y = 40,宽度= 10,高度= 10(基本上是一个矩形)w.r.t.框架。

问题

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

1 个答案:

答案 0 :(得分:3)

第1点)我猜你是将图片添加到JPanel然后添加到JFrame或图片添加到JPanel进入JScrollPane最终落在JFrame内。 JPanelJScrollPane都支持使用#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),你应该玩。我不能给你一个更准确的答案或代码样本,因为我不完全理解你正在尝试做什么,而且我没有可以使用的代码示例。