【问题标题】:Why is Frame.Width and Frame.Height returning very incorrect values为什么 Frame.Width 和 Frame.Height 返回非常不正确的值
【发布时间】:2017-11-12 23:12:25
【问题描述】:

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

但是,当我尝试根据 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();
}
}

【问题讨论】:

  • Frame.WIDTH?你为什么还要使用它?你想用这段代码实现什么?一些图片链接会很好。顺便说一句,这不是您显示比例宽度图像的方式。
  • 阅读我上面的描述,你会明白的。
  • public static final int WIDTH = 1;public static final int HEIGHT = 2;imageUpdate 方法中使用的标志,很确定它们没有按照您的想法做 - 这是阅读 JavaDocs 变得非常重要的地方

标签: java image jframe height width


【解决方案1】:

你调用的是ImageObserver的一个静态字段,表示基础图片的宽度现在是可用的,可以取你想要的宽度

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

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

【讨论】:

  • 不知道我是怎么错过的。但是,当我进行更改时,我仍然得到完全相同的结果。
  • 你是否也改变了这一行 g.drawImage(image, Frame.WIDTH, Frame.HEIGHT, null);
  • 等等,我没有正确更改代码,现在它可以工作了。谢谢!
  • 总是乐于提供帮助
  • 如果此答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做
猜你喜欢
  • 2013-03-08
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多