【问题标题】:Dimension Object Advantages & Disadvantages?维度对象的优点和缺点?
【发布时间】:2013-12-30 22:47:48
【问题描述】:

在使用JFrame 时,我注意到有些人花时间在做

 setSize(new Dimension(400,400));

而不是简单

setSize(400,400);

如果不将对象存储在变量中,使用先验而不是后者有什么特别的优势吗?

另外,我不能直接在JFrame中画画吗?我需要画布吗?扩展Canvas 是不是最好?没有JComponent 替代Canvas

【问题讨论】:

  • Canvas 的 JComponent 替代品是 JPanel。只要记住要覆盖paintComponent,而不是paint,并确保paintComponent 方法中的第一行是对super.paintComponent 的调用。

标签: java swing canvas jframe


【解决方案1】:

在使用 JFrame 时,我注意到有些人花时间在做

setSize(new Dimension(400,400));

而不是简单

setSize(400,400);

使用先验而不是先验有什么特别的优势吗? 如果不将对象存储在变量中,则后者?

没有。基本上这只是一个纵容,所以你不需要做类似的事情......

Dimension dim = new Dimension(400, 400);
setSize(dim.width, dim.height);

你可以这样做

setSize(dim);

话虽如此,您不应该依赖它,因为pack 会产生更好的结果,如果您正确构建了基础组件...

另外,我不能直接在 JFrame 中绘制吗?我需要画布吗?

一般来说,不,你不应该直接在框架上绘制,有很多重要的原因,首先,JFrame(和其他顶级容器)不是双缓冲的,所以重绘会闪烁,此外,框架装饰画在框架内,所以如果你直接在框架上绘画,你会冒着在装饰下绘画的风险......

例如...

因为我懒得再打字了……

扩展 Canvas 是不是最好?没有 Canvas 的 JComponent 替代品?

这取决于您的需求。 Canvas 是一个重量级的组件,因此将其添加到 JFrame 可能会导致问题。它也不是双缓冲的,所以要么你需要实现一个BufferStrategy 要么实现你自己的双缓冲...

不,没有 Swing 替代 Canvas,但请记住,Swing 组件已经是双缓冲的,并且(至少从 Java 6 开始......我认为)支持通过 Direct3D 或 OpenGL 的硬件加速(如果可用) ...

【讨论】:

  • @nachokk 早上 530 点不在 iPad 上打字会容易得多;)
  • @MadProgrammer 非常感谢!但是,如果我将来想从事 3D 游戏开发工作,您对图形有什么建议?只是标准的画布和 JFrame?
  • 如果我没记错的话,大多数 3D 库都使用了自己的渲染组件(我相信它是基于重量级组件),所以无论哪种方式都没有真正的好处。一般的经验法则是,不要混合使用重量轻的组件
猜你喜欢
  • 2013-08-25
  • 2015-03-20
  • 2012-05-04
  • 2013-10-11
  • 2012-04-17
  • 2010-09-20
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多