Java 维度对象的优势和;缺点?
当使用Java 维度对象的优势和;缺点?,java,swing,canvas,jframe,Java,Swing,Canvas,Jframe,当使用JFrame时,我注意到有些人把时间花在 setSize(new Dimension(400,400)); setSize(new Dimension(400,400)); 而不仅仅是 setSize(400,400); setSize(400,400); 如果不将对象存储在变量中,使用前一种方法比使用后一种方法有什么特别的优点 另外,我不能直接在JFrame中绘制吗?我需要帆布吗?扩展Canvas是否就是最好的选择?没有JComponent替代Canvas 当使用JFrame时
JFrame
时,我注意到有些人把时间花在
setSize(new Dimension(400,400));
setSize(new Dimension(400,400));
而不仅仅是
setSize(400,400);
setSize(400,400);
如果不将对象存储在变量中,使用前一种方法比使用后一种方法有什么特别的优点
另外,我不能直接在JFrame
中绘制吗?我需要帆布吗?扩展Canvas
是否就是最好的选择?没有JComponent
替代Canvas
当使用JFrame时,我注意到有些人花时间
setSize(new Dimension(400,400));
setSize(new Dimension(400,400));
而不仅仅是
setSize(400,400);
setSize(400,400);
使用优先权而不是优先权有什么特别的优势吗
如果不将对象存储在变量中,则为后者
不,基本上这只是一种纵容,所以你不需要做像
Dimension dim = new Dimension(400, 400);
setSize(dim.width, dim.height);
你可以这么做
setSize(dim);
话虽如此,您不应该依赖它,因为如果您正确构建了基础组件,pack
将产生更好的结果
另外,我可以不直接在JFrame中绘制吗?我需要帆布吗
一般来说,不应该直接在框架上绘制,首先,有许多重要原因说明,JFrame
(和其他顶级容器)不是双缓冲的,因此重绘会闪烁,而且框架装饰也在框架内绘制,因此如果直接在框架上绘制,你冒着在装饰下绘画的风险
例如
Canvas
是一个很重的组件,因此将其添加到JFrame
中可能会导致问题。它也不是双缓冲的,所以您需要实现缓冲策略
,或者实现您自己的双缓冲
不,除了画布,没有Swing的替代方案,但是请记住,Swing组件已经是双缓冲的(至少从Java 6开始…我认为),支持通过Direct3D或OpenGL(如果可用)进行硬件加速
当使用JFrame时,我注意到有些人花时间
setSize(new Dimension(400,400));
setSize(new Dimension(400,400));
而不仅仅是
setSize(400,400);
setSize(400,400);
使用优先权而不是优先权有什么特别的优势吗
如果不将对象存储在变量中,则为后者
不,基本上这只是一种纵容,所以你不需要做像
Dimension dim = new Dimension(400, 400);
setSize(dim.width, dim.height);
你可以这么做
setSize(dim);
话虽如此,您不应该依赖它,因为如果您正确构建了基础组件,pack
将产生更好的结果
另外,我可以不直接在JFrame中绘制吗?我需要帆布吗
一般来说,不应该直接在框架上绘制,首先,有许多重要原因说明,JFrame
(和其他顶级容器)不是双缓冲的,因此重绘会闪烁,而且框架装饰也在框架内绘制,因此如果直接在框架上绘制,你冒着在装饰下绘画的风险
例如
Canvas
是一个很重的组件,因此将其添加到JFrame
中可能会导致问题。它也不是双缓冲的,所以您需要实现缓冲策略
,或者实现您自己的双缓冲
不,除了
Canvas
,没有Swing替代品,但是请记住,Swing组件已经是双缓冲的,并且(至少从Java 6开始…我认为),支持通过Direct3D或OpenGL(如果可用)进行硬件加速…替代Canvas的JComponent是JPanel。只需记住重写paintComponent,而不是paint,并确保paintComponent方法中的第一行是对super.paintComponent的调用。画布的JComponent替代品是JPanel。只需记住重写paintComponent,而不是paint,并确保paintComponent方法中的第一行是对super.paintComponent的调用。@nachokk早上530点不在iPad上打字时会容易得多;)@非常感谢你!但是,如果我想在未来从事3D游戏开发,你会推荐什么图形?只有标准画布和JFrame?如果我没记错的话,大多数3D库都使用自己的渲染组件(我相信它是基于一个重量级组件),所以这两种方法都没有真正的好处。一般的经验法则是,不要将重量和重量混合在一起components@nachokk当你早上530点不在iPad上打字时,这会容易得多;)@非常感谢你!但是,如果我想在未来从事3D游戏开发,你会推荐什么图形?只有标准画布和JFrame?如果我没记错的话,大多数3D库都使用自己的渲染组件(我相信它是基于一个重量级组件),所以这两种方法都没有真正的好处。一般的经验法则是,不要混合使用重型和轻型组件