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

Posted

技术标签:

【中文标题】为啥 Frame.Width 和 Frame.Height 返回非常不正确的值【英文标题】: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 变得非常重要的地方 【参考方案1】:

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

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

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

【讨论】:

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

以上是关于为啥 Frame.Width 和 Frame.Height 返回非常不正确的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥 canvas.toDataURL() 会抛出安全异常?

UIButton 放置和约束

IOS swift View.frame.width 错误

iPhone 6S屏幕中心坐标[关闭]

WKWebView 禁用缩放和快速编辑

试图呈现 tableView