Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 维度对象的优势和;缺点?_Java_Swing_Canvas_Jframe - Fatal编程技术网

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
(和其他顶级容器)不是双缓冲的,因此重绘会闪烁,而且框架装饰也在框架内绘制,因此如果直接在框架上绘制,你冒着在装饰下绘画的风险

例如

就因为我不想再打一遍

扩展画布是最好的选择吗?没有可替代画布的JComponent

这取决于你的需要
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
(和其他顶级容器)不是双缓冲的,因此重绘会闪烁,而且框架装饰也在框架内绘制,因此如果直接在框架上绘制,你冒着在装饰下绘画的风险

例如

就因为我不想再打一遍

扩展画布是最好的选择吗?没有可替代画布的JComponent

这取决于你的需要
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库都使用自己的渲染组件(我相信它是基于一个重量级组件),所以这两种方法都没有真正的好处。一般的经验法则是,不要混合使用重型和轻型组件