java – 绘制或使用JLabel是否更好
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 绘制或使用JLabel是否更好,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3511字,纯文字阅读大概需要6分钟。
内容图文
![java – 绘制或使用JLabel是否更好](/upload/InfoBanner/zyjiaocheng/732/0a55c39f25dc4af8a3f751575bc18dfe.jpg)
我正在开发一个Swing应用程序,它将在后台有一些图像.我想知道以下哪种方式更有效(或更好),或者如果你有另一种方式建议:
getGraphics().drawImage(t.getImage().getImage(),i * 16,j * 16,this);
要么
JLabel tile = new JLabel(t.getImage());
tile.setBounds(i * 16, j * 16, t.getImage().getIconWidth(), t.getImage().getIconHeight());
add(tile);
编辑:
这是事情发生的地方:
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 3; i++) {
Tile t = map.getTiles()[j][i];
if (t != null) {
// Draw it somehow.
}
}
}
解决方法:
关于:
getGraphics().drawImage(t.getImage().getImage(), i * 16, j * 16, this);
您永远不应该使用通过在组件上调用getGraphics()获得的Graphics对象进行绘制,因为这样获得的Graphics对象将是短暂的,并且您的绘图可能会变得不稳定.要了解我的意思,请尝试使用您的技术,然后在创建GUI后,最小化并恢复它,您可能会看到部分或全部图像消失.相反,您应该使用给定的Graphics对象在JPanel(或其他JComponent派生类)的paintComponent(…)方法内部绘制.
每次想要绘制图像时也不要读取图像,因为这样做会导致程序不必要的减慢.相反,如果图像不是很大,请在程序启动时一次读取它们,将它们放入BufferedImage或ImageIcon变量(根据需要),并在应用程序中需要的时间和地点使用它们.
关于:
JLabel tile = new JLabel(t.getImage());
tile.setBounds(i * 16, j * 16, t.getImage().getIconWidth(), t.getImage().getIconHeight());
add(tile);
这很好,除了setBounds(…)部分,它表明程序没有正确使用布局管理器.让JLabel及其ImageIcon设置自己的首选大小,让布局管理器在设置组件和调整GUI大小时使用它.
请注意,您可以为JLabel的布局管理器添加组件,就像它们是JPanel一样.主要区别在于JLabel默认不是不透明的.
关于哪个更好,使用JLabel来保存paintComponent(…)中的图像或绘图:通常取决于图像是否必须调整大小以适合组件.如果是这样,请在JPanel的paintComponent(…)中绘制.否则使用JLabel.
编辑
根据你的意见:
Regarding part two, I am not using a layout manager.
那么你的GUI就有可能在不同的操作系统上变得丑陋,并且有可能无法进行扩展.布局管理器是Swing编程中最强大的方面之一,如果您使用它们,您的GUI将更容易编码,更新,增强和在其他系统上运行良好.
Regarding part two, what Graphics object am I passing to paintComponent()?
您不会将任何Graphics对象传递给JPanel的paintComponent(Graphics g).这是JVM的重绘管理器在您的建议(通过调用repaint())或操作系统的建议时调用的方法.
Finally, are you saying that it doesn’t really matter which of the two options I use?
不,我没有这么说.请在此编辑之上重新阅读我的建议.
编辑2
主要链接:
> Lesson: Performing Custom Painting:用于螺母和螺栓
> Painting in AWT and Swing:为血淋淋的细节.
编辑3
对于平铺贴图,我将使用ImageIcons作为我的平铺图像,然后将它们显示在JLabel的网格中.这样,交换tile就像在感兴趣的JLabel上调用setIcon(nextIcon)一样简单.
例如,请参阅TrashGod以及我对此问题的回答:jlabel images array.
关于:
As far as the layout manager, I have a good reason. I’ve made many GUIs with layout managers, but this one is special ;).
这样做需要你自担风险,而且我愿意下赌啤,你的推理是不正确的.
编辑4
The reason why I am not using a layout manager is because I am trying to make a small RPG game in Swing.
然后,tile最好保存在使用GridLayout的容器中,并且该容器可能保存在JScrollPane中,以便您可以在任何方向上滚动.然后,您可以让您的精灵坐在JLabel中(通过给它们一个合适的布局),或者使用JLayeredPane.
I don’t want any comments telling me I can’t or I shouldn’t because if it is impossible, I’ll find out on my own.
>当然,我们不会告诉你,你不能做任何事情,但是否则你不能规定我们应该或不应该告诉你什么.你来这里是为了征求我们的意见,我们有义务告诉你我们认为最有效的方法.您有权遵循我们的建议或不遵守我们的建议,因为这是您的计划,但同样,您不能规定我们能够或不能告诉您的内容,除非您不应容忍或允许粗鲁或令人反感的陈述(标记主持人)如果你看到这个,他们会照顾它.
内容总结
以上是互联网集市为您收集整理的java – 绘制或使用JLabel是否更好全部内容,希望文章能够帮你解决java – 绘制或使用JLabel是否更好所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。