Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 为什么Frame.Width和Frame.Height返回的值非常不正确_Java_Image_Jframe_Height_Width - Fatal编程技术网

Java 为什么Frame.Width和Frame.Height返回的值非常不正确

Java 为什么Frame.Width和Frame.Height返回的值非常不正确,java,image,jframe,height,width,Java,Image,Jframe,Height,Width,我想根据JFrame的帧和宽度显示图像,这样图像将根据帧的大小按比例显示。我的程序设计为不可能使用任何布局管理器 但是,当我尝试根据frame.width和frame.height参数显示图像时,它会一直在JFrame的左上角显示图像。另外,打印包含frame.width和frame.height返回值分别为1和2的语句。这怎么可能?我已经把代码放在下面了 另外,我为奇怪的缩进感到抱歉,但是我很难让代码正确地显示在这个网站上。我必须手动按下某些行的空格键4次,即使我知道它是代码中正确的缩进,当我

我想根据JFrame的帧和宽度显示图像,这样图像将根据帧的大小按比例显示。我的程序设计为不可能使用任何布局管理器

但是,当我尝试根据frame.width和frame.height参数显示图像时,它会一直在JFrame的左上角显示图像。另外,打印包含frame.width和frame.height返回值分别为1和2的语句。这怎么可能?我已经把代码放在下面了

另外,我为奇怪的缩进感到抱歉,但是我很难让代码正确地显示在这个网站上。我必须手动按下某些行的空格键4次,即使我知道它是代码中正确的缩进,当我这样做时,它显示在代码视图中,但缩进不正确

public class ExperimentGame extends JPanel{

Image image;

public ExperimentGame(){
    JFrame frame = new JFrame();
    SwingUtilities.isEventDispatchThread();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(this);
    frame.pack();
    frame.setSize(500,500); //my edit
    this.setBackground(Color.WHITE);
    frame.setVisible(true);
    try {
        image = ImageIO.read(this.getClass().getResource("spaceship (0).png"));
    } 
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    revalidate();
    repaint();
    System.out.println(Frame.WIDTH + " " + Frame.HEIGHT);

}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(image, Frame.WIDTH, Frame.HEIGHT, null);
}
}

public class ExperimentMain {

public static void main(String[] args) {
    ExperimentGame game = new ExperimentGame();
}
}

您所调用的是ImageObserver的静态字段,它指示基础图像的宽度现在可用,并且可以根据需要进行拍摄

 System.out.println(frame.getWidth() + " " + frame.getHeight());

请注意,我调用的是frame对象的方法,而不是frame类的静态字段

frame.WIDTH?你为什么要用这个?你想用这段代码实现什么?一些图片链接会很好。顺便说一下,这不是显示比例宽度图像的方式。阅读我上面的描述,您将看到。public static final int width=1;公共静态最终内部高度=2;是在imageUpdate方法中使用的标志,非常确定它们没有做你认为它们是的事情-这就是阅读变得非常重要的地方我不知道我怎么会错过它。但是,当我进行更改时,仍然得到完全相同的结果。您是否也更改了这行g.drawImageimage,Frame.WIDTH,Frame.HEIGHT,null;等等,我没有正确更改代码,现在它可以工作了。非常感谢。总是乐意帮忙如果这个答案已经解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做