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

时间:2017-06-11 11:05:53

标签: java image jframe height width

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

然而,当我尝试根据frame.width和frame.height参数显示图像时,它会一直显示JFrame左上角的图像。此外,包含frame.width和frame.height的print语句分别返回值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();
}
}

1 个答案:

答案 0 :(得分:0)

你所说的是ImageObserver的静态字段,它表示基本图像的宽度现在可用,可以按照你想要的方式进行

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

注意我调用框架对象的方法而不是Frame类的静态字段