显示带有图像背景的 GUI 组件时出现问题
Posted
技术标签:
【中文标题】显示带有图像背景的 GUI 组件时出现问题【英文标题】:Problems displaying GUI components with img background 【发布时间】:2015-06-21 22:45:36 【问题描述】:我已经为我的 Java 小程序添加了背景,我需要一些帮助来理解为什么小程序不能正确显示。为了显示这个背景图片,我使用了下面的代码:
BufferedImage img = null;
try
URL url = new URL(getCodeBase(), "Backgrounds/Background.png");
img = ImageIO.read(url);
catch (Exception e)
然后也把这个放到paint方法中...
public void paint(Graphics g)
g.drawImage(img, 0, 0, null);
问题是在绘制背景时您看不到按钮和标签等 GUI 组件,即使在其他 GUI 组件添加到内容窗格之前绘制背景也是如此。可以让组件出现,但您必须先突出显示它们或单击它们。
此图为小程序加载时的小程序:
然后这是我在屏幕上点击了几个地方后的小程序:
【问题讨论】:
为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets。 是的,这是一个大学作业,我真的没有太多选择 【参考方案1】:public void paint(Graphics g)
g.drawImage(img, 0, 0, null);
首先,该方法调用应该是:
public void paint(Graphics g)
g.drawImage(img, 0, 0, this); // Every Component is an image observer
然后,修复损坏的油漆链:
public void paint(Graphics g)
super.paint(g); // Draw the rest of the components!
g.drawImage(img, 0, 0, this); // Every Component is an image observer
【讨论】:
其他组件实际上并没有绘制,它们只是通过各种不同的方法添加到内容窗格中,抱歉我没有说得太清楚 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 @JL9 当然可以,但是paint负责绘制子组件,如果您不调用super.paint,它们将不会被绘制为父容器的一部分... @MadProgrammer 我确实尝试将 super.paint 放入其中并没有什么不同,子组件仍然像上图一样显示,您必须突出显示它们才能看到它们 @jl9 然后,您的代码中还有其他一些您没有向我们展示的内容。您还应该检查 img 是否为 null,因为绘制 null img 会导致问题...以上是关于显示带有图像背景的 GUI 组件时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 iOS 5 SDK 的 TTThumbsViewController 时出现奇怪的白条