使用JFrame
时,我注意到有些人花时间做了
setSize(new Dimension(400,400));
而不是简单
setSize(400,400);
如果不将对象存储在变量中,使用先验而不是后者是否有任何特别的优势?
另外,我不能直接在JFrame
画画吗?我需要一块帆布吗?是否最好扩展Canvas
?没有JComponent
替代Canvas
?
答案 0 :(得分:4)
使用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吗?没有Cancast的JComponent替代?
这取决于您的需求。 Canvas
是一个重量级的组件,因此将其添加到JFrame
可能会导致问题。它也不是双缓冲的,所以你需要实现一个BufferStrategy
或者实现你自己的双缓冲......
不,没有Swing替代Canvas
,但请记住,Swing组件已经双缓冲(至少从Java 6开始......我认为),通过Direct3D或OpenGL支持硬件加速在哪里......