Java 在有限的空间中显示图像的特定部分?
我有一个100x100的框架和一个400x400的图像,我在整个框架上有一个分层窗格,图像在分层窗格中。正如您所注意到的,图像比边框大,因此仅显示图像的一部分,即图像的左上部分。假设图像中有一个人,X=32,y=40,宽度=10,高度=10(基本上是一个长方形),w.r.t.框架 问题Java 在有限的空间中显示图像的特定部分?,java,image,swing,jframe,jscrollpane,Java,Image,Swing,Jframe,Jscrollpane,我有一个100x100的框架和一个400x400的图像,我在整个框架上有一个分层窗格,图像在分层窗格中。正如您所注意到的,图像比边框大,因此仅显示图像的一部分,即图像的左上部分。假设图像中有一个人,X=32,y=40,宽度=10,高度=10(基本上是一个长方形),w.r.t.框架 问题 图像是400x400,对吗?这意味着在运行时,我只能看到图像的100x100部分,而显示的图像部分是左上角的右上角?但假设我想展示一座位于350x350 w.r.t.的建筑,那么我该怎么做(因为它位于图像的底部,
JPanel
中,然后添加到JFrame
中,或者将图像添加到JPanel
中,然后进入JScrollPane
中,最后进入JFrame
中JPanel
s和JScrollPane
s都支持使用编程滚动
这是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);
JPanel面板=新的JPanel();
JPanel panel2=新的JPanel();
面板2.设置首选尺寸(新尺寸(20011000));
SpringLayout布局=新的SpringLayout();
面板2.设置布局(布局);
对于(int i=0;i<100;i++){
JLabel textField=新的JLabel();
textField.setText(“textField编号”+i);
setPreferredSize(新维度(150100));
layout.putConstraint(SpringLayout.NORTH,textField,i*110,SpringLayout.NORTH,panel2);
面板2.添加(文本字段);
}
JScrollPane scrollPane=新的JScrollPane(panel2,ScrollPaneConstants.VERTICAL\u SCROLLBAR\u根据需要,ScrollPaneConstants.HORIZONTAL\u SCROLLBAR\u根据需要);
scrollPane.setPreferredSize(新维度(200500));
panel2.scrollRectToVisible(新矩形(0800150100));
panel.add(滚动窗格);
将panel变量添加到JFrame,就可以运行此代码了。另外,请注意,这是一个示例代码,而不是为将组件添加到面板而编写代码的实际方式:P
第2点)我仍然不完全理解这个问题,所以我将分两部分给你答案。
a) 我不明白为什么相对计算很重要?你能试试我提供的样品,看看它是否符合要求吗?如果不是,请阅读选项b
b)
Rectangle
对象有一个setLocation(int,int)
(参考:)可供您使用。我不能给你一个更准确的答案或一个代码示例,因为我不完全理解你想做什么,而且我没有一个代码示例可以使用。我不清楚问题2。你的意思是问,既然你在点[350350](我们称之为点X),你希望X在点[350350]进行计算吗?如果只是为了计算,我认为你应该考虑找到图像的“根”在哪里(应该是[-350,-350)],然后做相对的计算。不确定我是否完全理解,请澄清。回答不可接受?让我知道你还需要什么信息。谢谢你的建议,但你能给我一个示例代码(伪代码很好)。根据要求添加示例代码和查询的可能答案2.Deaths.gritting。。。do.not.call.setXXSizeever@kleopatra这是一段示例代码,仅用于演示scrollRectToVisible()的工作原理:(好的..我也不会在样品中这样做:(