jPanel 的背景图像不工作

2023-12-04

我是制作 GUI 的新手,所以我决定尝试使用 Eclipse 的 Windows 构建器,虽然很棒,但我确实有一些疑问。我一直在寻找,但我找不到找到将背景图像添加到我的“菜单”的好方法。例如我尝试过这个:

public Menu() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(50, 50, 300, 250); //Dimensiones

contentPane = new JPanel() {  //Imagen de Fondo

    public void paintComponent(Graphics g) {  
          Image img = Toolkit.getDefaultToolkit().getImage(  
          Menu.class.getResource("/imgs/rotom.jpg"));  
          g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);  
        }  
};  

并添加以下类:

 import java.awt.Graphics;  
 import java.awt.Image;  
 import java.awt.Toolkit;  

但窗口仍保持其暗灰色无济于事,到目前为止,我的代码只是 WindowsBuilder 为您编写的标准代码加上 4 个按钮,但我怀疑它们在这里是否重要。我添加的代码不应该覆盖 jPanel 的 PaintComponent() 方法并在其中绘制图像吗?

菜单的类位于我的项目中的一个包中,图像位于同一项目中的 imgs 包中。

预先非常感谢。


如果您对调整背景图像大小或应用任何效果不感兴趣,一个简单的方法是使用JLabel...

BufferedImage bg = ImageIO.read(Menu.class.getResource("/imgs/rotom.jpg"));
JLabel label = new JLabel(new ImageIcon(bg));
setContentPane(label);
setLayout(...);

这种方法有局限性(除了缩放之外),因为标签的首选尺寸始终是图像的尺寸,并且从不考虑其内容。这既是好事也是坏事。

您似乎正在使用的另一种方法是使用专门的组件

public class BackgroundPane extends JPanel {

    private BufferedImage img;

    public BackgroundPane(BufferedImage img) {
        this.img = img;
    }

    @Override
    public Dimension getPreferredSize() {
        return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(), img.getHeight());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this);
    }
}

您应该避免尝试执行以下任何任务paintComponent方法可能需要一些时间才能完成paintComponent可能会经常被调用,并且通常会快速连续调用......

在调整组件大小时使图像缩放本身就是一个完整的问题,对于一些想法,您可以看看......

  • Java:保持 JPanel 背景图像的宽高比
  • Java:JPanel 背景不缩放
  • 调整大小后图像质量非常低 - Java
  • 读取/加载图像

哦,而且,您应该避免直接从顶级容器扩展,例如JFrame,它们降低了组件的可重用性并将您锁定在单个容器中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jPanel 的背景图像不工作 的相关文章

随机推荐

  • 从 Java 搜索 Google 图片

    我本来可以在这里得到我的问题的答案 从java代码搜索谷歌图像 但是该库已被弃用 我不想通过使用该已弃用的源来搞砸我正在从事的这个研究项目 告诉我 你在做什么 我正在尝试为我的研究项目创建一个应用程序来搜索医学术语的描述 例如脱发 以及与之
  • 使用 iPhone MapKit 自定义地图

    我正在尝试使用 MapKit 创建自定义地图 类似于这个概念http mapwow com 使用图像而不是谷歌地图图像 这样我们就可以包含 GPS 功能和引脚功能 我查看了文档 似乎没有标准的方法 有没有办法使用 MapKit 来做到这一点
  • Java“?”检查 null 的运算符 - 它是什么? (不是三元!)

    我正在读书一篇信息世界文章 链接到 Wayback machine 因为摘录已被删除 并发现了这个小花絮 以最新版本的 Java 为例 尝试进行空指针检查 通过提供简写语法更容易 用于无休止的指针测试 只是 给每个方法加一个问号 调用自动包
  • 使用 move_pages() 移动大页?

    这个问题是针对 内核3 10 0 1062 4 3 el7 x86 64 通过引导参数分配的非透明大页 可能会或可能不会映射到文件 例如安装的大页 x86 64 根据这个内核source move pages 将会通知do pages mo
  • str_word_count 函数中的数值和特殊字符

    我想要 str word count 中的数值和特殊字符值 那么如何才能做到这一点呢 例子 str str word count B2B my78 test Number 10 1 print r str Output Array 0 gt
  • 在 Eclipse 中获取 Checkstyle 插件以使用您的自定义检查

    我写了一张自定义支票MethodLimitCheck java 我还有一个自定义配置文件myconfigurationfile xml其中包含以下内容 module name Checker gt
  • 如何禁用 React.js 中的按钮

    我有这个组件 import React from react export default class AddItem extends React Component add this props onButtonClick this in
  • Ruby on Rails 和优惠券模型

    我真的一直对此摸不着头脑 非常感谢您的帮助 我有一个商店 人们可以在那里学习课程 我有课程模型 订单模型和优惠券模型 这是模型中的关联 class Course lt ActiveRecord Base belongs to categor
  • 按下<按钮>选择器

    我想创建一个button当它被按下时会改变它的风格 这是我的 CSS 代码 button font size 18px border 2px solid gray border radius 100px width 100px height
  • java.lang.NoSuchMethodError: org.springframework.web.context.ConfigurableWebApplicationContext.setId(Ljava/lang/String;)V

    下面是我的 Spring Batch 项目的 pom xml 如果我部署在 jboss 5 中 我会得到以下异常 但如果我部署在本地 Windows 机器中 同样的战争工作正常 我怀疑 jar 中存在冲突org springframewor
  • vscode 和 Visual Studio 之间的正则表达式差异

    vscode 和 Visual Studio 之间的正则表达式差异 从 开始 line1 line2 查找 替换 1 在 vscode 中它按预期工作 结果是 line1 line2 在工作室里 似乎不起作用 导致 line1 line2
  • 为什么要在 Java 中调用 super() ?

    我在一本关于java的书中看到了一个例子 public class A public A System out println A public class B extends A public B super System out pri
  • 打开项目会更改 iis 设置

    我有这个问题 在开发时我使用 git 并经常克隆到一个新文件夹来修复较小的错误 问题是 一旦我打开项目 Visual Studio 就会更改 IIS 设置以指向新文件夹 有什么办法可以防止这种情况发生吗 比如打开项目时按住ctrl键什么的
  • 如何在 android 中向 EditText 添加分页行?

    是否可以在a中显示分页行EditText 我的意思是这些行 就说我的EditText大小为 500 x 500 像素 我希望这些线条在 500 x 500 的正方形中可见 有没有一种构建方法可以做到这一点 我已经尝试过谷歌但找不到答案 我想
  • JLayer Mono Mp3 到 PCM 解码

    我目前正在使用 javalayer 1 1 进行 mp3 解码 所以我想从我的 44100 Hz 16 位 Mp3 接收原始 PCM 数据 它与立体声 mp3 完美配合 但我在单声道 mp3 上遇到奇怪的问题 这里有一些代码 InputSt
  • 如何通过 Excel 网络查询从 Google Directions API 提取距离?

    我在 Excel 中有一个长长的出发地和目的地列表 使用 webquery 我可以填写城市和邮政编码以提供如下 webquery 这会返回一个很长的 XML 文件 但我需要的只是距离 有没有办法只提取距离值 或者我应该运行一个宏脚本来一一提
  • 为什么alert出现在document.write之前?

    当按照编写的顺序执行以下代码时 为什么警报仍然在第一个 即使它在第二行 谢谢 document write Hello World alert You wrote to the document Javascript 被解释 所以它是逐行执
  • 使用保存的模型对象进行预测

    我正在尝试使用之前保存的模型来使用 R 中的预测函数 使用以下代码创建并保存模型 lrModel1 lt glm response data modelData family binomial model TRUE save lrModel
  • 如果元素中有内容,如何在 Javascript/jQuery 中添加类?

    我正在开发一个网站 我想检查元素中是否有任何内容 下面是我的 html 代码 我已经提到过条件 1 where opacity pointseven如果类应该通过脚本添加类featured block title and featured
  • jPanel 的背景图像不工作

    我是制作 GUI 的新手 所以我决定尝试使用 Eclipse 的 Windows 构建器 虽然很棒 但我确实有一些疑问 我一直在寻找 但我找不到找到将背景图像添加到我的 菜单 的好方法 例如我尝试过这个 public Menu setDef