java - 使用 Swing 的 BG 图像而不覆盖 paintComponent

标签 java image background jframe jpanel

我目前正在设计一个包含多个屏幕的菜单,每个屏幕上有多个按钮。要在 jLabel 中的背景图像顶部使用按钮(默认情况下,我不能将按钮放在 jLabel 的顶部),我将 GridBagLayout 与两个面板/菜单屏幕一起使用,一个面板包含按钮(不透明 = false) 和一个带有背景图像的面板,或 jLabel。为了根据用户在菜单中的位置切换当前显示的面板,我用单独的方法而不是类制作了每个菜单屏幕(也就是每 2 个面板)。

现在,我已经到了我正在处理不必要地复杂的界面部分的地步,我不认为 GridBag 会满足我的目的,所以我想知道是否有不同的方法来绘制我的背景图像,仍然可以在图像顶部使用我的按钮。

我查找的最流行的方法是覆盖 paintComponent 方法,但我不能那样做,因为我是在单独的方法而不是类中创建 JPanel。它们都包含在我原来的 JFrame 中。

不胜感激,谢谢!

刚刚添加了这段代码,但出于某种原因我的背景仍然是白色的?现在正在尝试其他建议,谢谢大家!

private void mainPanel() {

    icon = new ImageIcon(getClass().getResource("/phantasma/menuv1.png"));
mainContainer1 = new javax.swing.JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(icon.getImage(), 0,0, null);
            super.paintComponent(g);
        }
    };

最佳答案

BG image with Swing without overriding paintComponent

我不知道为什么所有帖子都建议为此进行自定义绘画。如果您需要自动缩放背景图像,您只会进行自定义绘画。

如果您想要以实际大小绘制图像,请使用 JLabel。

I can't put buttons on TOP of the jLabel),

当然可以。只需为 JLabel 设置 LayoutManager,然后您就可以像向面板添加组件一样向其添加任何组件。

关于java - 使用 Swing 的 BG 图像而不覆盖 paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542124/

相关文章:

java - 安卓 : Espresso test FW throwing "No tests found.." exception

image - 查看图像时执行bat文件

html - CSS 背景属性使用

java - 从 java.lang.Observable 迁移到 RxJava

java - 从 YAML 文件 : No content to map due to end-of-input 读取时出现 JsonMappingException

Java Swing,所有图像均出现像素化

python - 图像定位 OpenCV

html - CSS - 如何设置背景图像在 IE11 中拉伸(stretch)

CSS - 为什么我的背景颜色没有在 IE 中显示?

java - Java/Play 中的 JSON 代理!框架