Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在有限的空间中显示图像的特定部分?_Java_Image_Swing_Jframe_Jscrollpane - Fatal编程技术网

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

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.的建筑,那么我该怎么做(因为它位于图像的底部,

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

问题
  • 图像是400x400,对吗?这意味着在运行时,我只能看到图像的100x100部分,而显示的图像部分是左上角的右上角?但假设我想展示一座位于350x350 w.r.t.的建筑,那么我该怎么做(因为它位于图像的底部,所以不会显示)
  • 假设第一个问题已解决,然后假设在350x350处有一座宽度为20、高度为20 w.r.t‘框架’的建筑。现在,当我在运行时显示图像时(现在图像的底部可见,假设问题1已解决),建筑物w.r.t.框架的坐标不应改变,即它们应保持350x350 w.r.t.框架
  • 第1点)我猜你是将图像添加到
    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()的工作原理:(好的..我也不会在样品中这样做:(