Java中如何设置背景图片?

2024-04-19

我正在使用 Java 使用 BlueJ 作为 IDE 开发一个简单的平台游戏。现在,我在游戏中使用多边形和简单形状绘制了玩家/敌人精灵、平台和其他物品。最终我希望用实际图像替换它们。

现在我想知道将图像(URL 或来自本地源)设置为游戏窗口/画布的“背景”的最简单的解决方案是什么?

如果它不是很长或很复杂,我将不胜感激,因为我的编程技能不是很好,而且我想让我的程序尽可能简单。请提供带有注释的示例代码来详细说明其功能,以及如果它在自己的类中,如何调用它在其他类上使用的相关方法。

非常感谢。


根据应用程序或小程序是否使用,答案会略有不同AWT http://java.sun.com/javase/6/docs/technotes/guides/awt/ or Swing http://java.sun.com/docs/books/tutorial/uiswing/index.html.

(基本上,以J例如JApplet and JFrame是摇摆,并且Applet and Frame是 AWT。)

无论哪种情况,基本步骤都是:

  1. 绘制或加载图像到Image object.
  2. 在绘画事件中绘制背景图像Component你想绘制背景。

Step 1.加载图像可以通过使用Toolkit http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html类或由ImageIO http://java.sun.com/javase/6/docs/api/javax/imageio/ImageIO.html class.

The Toolkit.createImage http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#createImage(java.lang.String)方法可用于加载Image从指定的位置String:

Image img = Toolkit.getDefaultToolkit().createImage("background.jpg");

相似地,ImageIO可以使用:

Image img = ImageIO.read(new File("background.jpg");

Step 2.绘画方法为Component应该得到背景将需要被覆盖并绘制Image到组件上。

对于 AWT,要重写的方法是paint http://java.sun.com/javase/6/docs/api/java/awt/Component.html#paint(java.awt.Graphics)方法,并使用drawImage http://java.sun.com/javase/6/docs/api/java/awt/Graphics.html#drawImage(java.awt.Image,%20int,%20int,%20java.awt.image.ImageObserver)的方法Graphics http://java.sun.com/javase/6/docs/api/java/awt/Graphics.html被传递到的对象paint method:

public void paint(Graphics g)
{
    // Draw the previously loaded image to Component.
    g.drawImage(img, 0, 0, null);

    // Draw sprites, and other things.
    // ....
}

对于 Swing,重写的方法是paintComponent http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)的方法JComponent http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html,并画出Image与 AWT 中所做的一样。

public void paintComponent(Graphics g)
{
    // Draw the previously loaded image to Component.
    g.drawImage(img, 0, 0, null);

    // Draw sprites, and other things.
    // ....
}

简单组件示例

这是一个Panel它在实例化时加载图像文件,并在自身上绘制该图像:

class BackgroundPanel extends Panel
{
    // The Image to store the background image in.
    Image img;
    public BackgroundPanel()
    {
        // Loads the background image and stores in img object.
        img = Toolkit.getDefaultToolkit().createImage("background.jpg");
    }

    public void paint(Graphics g)
    {
        // Draws the img to the BackgroundPanel.
        g.drawImage(img, 0, 0, null);
    }
}

有关绘画的更多信息:

  • 在 AWT 和 Swing 中绘画 http://java.sun.com/products/jfc/tsc/articles/painting/
  • 课程:进行定制绘画 http://java.sun.com/docs/books/tutorial/uiswing/painting/ from Java 教程 http://java.sun.com/docs/books/tutorial/index.html可能有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何设置背景图片? 的相关文章

  • 使用罗马图书馆获取所有 RSS 提要条目

    我正在使用 Java 的 Rome 库来解析一些 RSS 默认情况下需要 25 个条目 请告诉我 如何获得接下来的 25 个条目 我的测试代码是 public static SyndFeed getSyndFeedForUrl String
  • 在 JSF/JSP EL 和 Javascript 中连接字符串[重复]

    这个问题在这里已经有答案了 我在使用 EL 和 javascript 函数 JSF 1 2 Facelets Richfaces 3 3 0GA 时遇到问题 我有一个页面包含另一个组合
  • 当按下批准或取消按钮时,如何阻止 JFileChooser 关闭?

    我使用 JFileChooser 的 showOpenDialog 方法来打开文件 如何将 ActionListener 附加到批准按钮JFileChooser以及如何停止这个对话框 单击 批准 按钮且侦听器完成后关闭 现在我有 publi
  • 超时后如何重新建立 JDBC 连接?

    我有一个长时间运行的方法 它通过 EntityManager TopLink Essentials 执行大量本机 SQL 查询 每个查询只需要几毫秒即可运行 但查询数量却有数千个 这发生在单个 EJB 事务内 15 分钟后 数据库关闭连接
  • Javafx-场景快照不显示值和系列

    我制作了一个非常短的应用程序 它使用 javafx 生成图表 应用程序显示正确的值 图表 但当我做快照时 图像仅显示轴和标签 但不显示系列和值 stage setTitle Line Chart Sample final DateAxis
  • Electron 应用程序可以与 java 代码集成吗?

    由于node js仍然缺乏Java中存在的重要功能 因此我想使用Java而不是node js 并使用Web语言 html js css 创建客户端 Electron 是跨平台的 java 也是跨平台的 因此似乎有一个能够两全其美的解决方案
  • ffmpeg 用于屏幕捕获?

    所以我有一个小程序来捕获屏幕和计算机麦克风的声音 然后屏幕截图被编码为 ScreenVideo2 声音被编码为 AAC 如何使用 ffmpeg 逐帧混合 然后将混合输出发送到 wowza 媒体服务器 如果用ffmpeg无法完成 您能提供一些
  • Android ImageView未加载

    我正在使用 android imageView 并将图像放入可绘制文件夹中 并将 imageView 源更改为该图像 但它没有在预览面板中显示图像 当我在 android studio 中打开图片时 它显示这样的错误 但我可以在电脑桌面上打
  • 了解 Android 上的默认键盘

    我想知道 Android 中用户选择的默认键盘 我知道我可以使用以下命令访问启用的输入法列表InputMethodManager 但我想知道用户当前使用的是哪一个 到目前为止 我已经尝试获取当前的输入法子类型 InputMethodMana
  • 如何在 Java 中将 hashmap 转换为 JSON 对象 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Java 中将 hashmap 转换或转换为 JSON 对象 然后再次将 JSON 对象转换为 JSON 字符串 您可以使用 new
  • 如何使用 RestTemplate 禁用编码

    我正在使用 REST 模板有意在请求 uri 中发送 例如 items a b String responseEntity restTemplate exchange items a b requestObj getHttpMethod r
  • 将二进制文件转换为图像

    我需要找到一种将二进制文件转换为图像的快速方法 二进制文件由 N 个NN 矩阵 我想将 0 与一种颜色关联 将 1 与另一种颜色关联 我需要对超过 1000 个二进制文件执行此操作 如果可能的话 我想避免使用 MatLab 有没有任何工具
  • 如何使用java.util.concurrent包实现后台线程?

    这是我首先使用的代码 但在最新的 Android 版本中AsyncTask类已被弃用并且 因此它没有响应 然后我使用了Thread类 但该类也不起作用 我想要与我得到的结果相同的结果AsyncTask班级 我知道我必须使用 java uti
  • com.example.controller.UserController 中的字段 userRepository 需要类型为“com.example.repository.UserRepository”的 bean,但无法找到

    我正在学习 Spring Boot 运行应用程序时出现此错误 描述 com example controller UserController 中的字段 userRepository 需要类型为 com example repository
  • Keycloak - 自定义表单操作在流程中不可见

    我正在尝试为用户注册实现自定义表单操作 我在表单上添加了一些自定义字段 我希望验证这些字段 在浏览了 keycloak 文档后 我意识到我需要 扩展 FormAction FormActionFactory 将actionfactory打包
  • CoreNLP 如何识别小写的命名实体,例如 kobe bryant?

    我遇到一个问题 CoreNLP 只能识别以大写字符开头的命名实体 例如科比 布莱恩特 Kobe Bryant 但无法识别科比 布莱恩特 kobe bryant 作为一个人 那么CoreNLP如何识别以小写字符开头的命名实体 赞赏它 首先 您
  • 如何使用 Jersey 的内部路由机制来提取类/方法引用?

    我正在运行 Jersey 1 8 应用程序 Jersey 作为 Servlet 运行 我需要写一个小服务程序过滤器给定一个简单的请求 响应 能够确定哪个 REST 资源 方法将响应该请求并从注释中提取值 例如 假设我有以下资源 Path f
  • Swing JTable:当行可见或滚动到底部时发生事件?

    我正在寻找一种方法 以便在 JTable 滚动时收到通知 以便特定行变得可见 或者在表底部滚动到视图中时失败 理想情况下 这应该在不轮询的情况下完成 而是通过一些事件触发来完成 有任何想法吗 Add a ChangeListener到滚动窗
  • 如何在 Mulesoft 中将睡眠设置为流程而不丢失消息负载

    我想插入脚本来延迟 Mulesoft 中的处理流程 我尝试在 groovy 中插入脚本 但丢失了消息有效负载 因此当我必须获取消息有效负载时 收到了空指针 我怎样才能不丢失消息有效负载 Thanks 如果您正在使用Groovy流程中的组件
  • Fragment中有类似setResult()的方法吗?

    我正在使用一个片段 我收到错误onResult 方法 我需要一个替代方法setResult RESULT OK data 我可以在我的片段中使用它 请帮忙 日历片段 package app pal study samplestudy imp

随机推荐

  • 升级数据库

    我已经在谷歌商店中有一个应用程序 我正在使用一个有 3 个表的内置数据库 并在第一次启动应用程序时复制它 现在我想升级应用程序并添加另一个表 下面是我的代码 public DataBaseHelper Context context sup
  • 导入错误:没有名为 psycopg2 的模块

    在 OpenERP 6 的安装过程中 我想使用以下命令生成一个配置文件 cd home openerp openerp server bin openerp server py s stop after init c home opener
  • windows下如何设置keytool的密码?

    我正在为 android 应用程序开发的 my hello mapview 程序添加 google maps api 参考网站 http developer android com guide tutorials views hello m
  • 我需要处置 SemaphoreSlim 吗?

    根据文档 a SemaphoreSlim不使用 Windows 内核信号量 是否有任何特殊资源被使用SemaphoreSlim这使得打电话很重要Dispose当 的时候SemaphoreSlim将不再使用 如果您访问AvailableWai
  • Java中如何正确计算字符串的长度?

    我知道有String length以及其中的各种方法Character它或多或少适用于代码单元 代码点 Java 中实际返回 Unicode 标准指定的结果的建议方法是什么 UAX 29 http www unicode org repor
  • 保持 UI 响应的 Thread.Sleep 替代方案?

    我在 Visual Studio 2008 中使用 C 完成所有这些工作 我想放慢算法的工作速度 以便用户可以观看它的工作 GUI 上有可见的周期性变化 所以我添加了Thread Sleep每次实例之后 问题是Thread Sleep 当设
  • 赋值运算符的参数必须是引用吗?

    C 中重载类的赋值运算符时 其参数必须是引用吗 例如 class MyClass public MyClass operator const MyClass rhs 是真的吗 class MyClass public MyClass ope
  • 如何在 if 语句中使用 fork()

    有人可以向我解释一下是什么吗fork 0意思是 据我了解 我认为这意味着 fork 不是 false 吗 或者如果 fork 是 true 那么 我不明白 Fork 如何是 true 或 false 因为它只是将进程的副本创建到父进程和子进
  • 根据第一列中的字母数将行与上一行连接起来

    编码新手 试图弄清楚如何修复损坏的 csv 文件 以便能够正确使用它 因此 该文件已从案例管理系统导出 并包含用户名 案例 花费时间 注释和日期字段 问题在于 偶尔注释中会有换行符 并且在导出 csv 时 工具不包含引号来将其定义为字段内的
  • 在 GUI MATLAB 中为静态文本赋值

    如何在 MATLAB GUI 中为静态文本赋值 双击指南中的文本打开属性编辑器 然后编辑 String 财产 您还可以设置 Tag 属性 以便您可以在 GUI 运行时对其进行编辑 如果您将标签设置为mytext 您可以将静态文本更改为 My
  • 如何在 Python Qt 应用程序中使用 KDE Okular 的文档视图小部件?

    我正在 Linux 上使用 Qt 4 8 和 PyQt 用 Python 3 4 编写桌面应用程序 有没有办法将 Okular 的 pdf 查看功能作为小部件使用 导入 如果是 怎么办 这对我有用 import sys from PyKDE
  • 类型错误:这不是日期对象

    知道为什么这在 Chrome 中不起作用吗 var foo new Date getDate foo 我收到一个 TypeError 这不是 Date 对象 然而 new Date getDate works 该函数在您的示例中未正确绑定
  • 使用 Google Guice 注入 java 属性

    我想使用 google guice 使属性在我的应用程序的所有类中可用 我定义了一个加载并绑定属性文件的模块测试属性 Property1 TEST Property2 25 包com test import java io FileNotF
  • GUI 中的 Matlab 缩放监听器

    我有一个 GUI 由 MATLAB 中的绘图和静态文本组成 我想在绘图上有一个缩放侦听器 以便我可以用放大倍率更新静态文本 无论如何 我可以做到这一点吗 脚本文件 或者您可以将其作为嵌套函数执行 无论您喜欢什么 f figure 1 z z
  • 通过 api 上传照片时 Foursquare 缺少文件上传/InvalidPhotoFormat 错误

    我正在尝试使用 api 将照片添加到 foursquare 页面 https api foursquare com v2 photos add https api foursquare com v2 photos add和以下node js
  • 是否可以通过 Viber API 获取消息历史记录?

    根据 API 文档 http developers viber com api rest bot api index html viber rest api http developers viber com api rest bot ap
  • PyQt 与 PySide 比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前在 Linux 上的 Qt 重型 C Python 环境中开发了许多应用程序 并根据需要移植到 PC Mac 我使用嵌入 C 中的 Pyt
  • Firebase 9(模块化 sdk web )替换 fieldPath

    我将以下代码与 Firebase SDK 8 一起使用 const db firebase firestore const collectionRef db collection collectionName var query colle
  • Vue:v-model 不适用于动态组件

    例如
  • Java中如何设置背景图片?

    我正在使用 Java 使用 BlueJ 作为 IDE 开发一个简单的平台游戏 现在 我在游戏中使用多边形和简单形状绘制了玩家 敌人精灵 平台和其他物品 最终我希望用实际图像替换它们 现在我想知道将图像 URL 或来自本地源 设置为游戏窗口