Swing 关于JPanel背景图片、JButton按钮不显示的解决办法

您所在的位置:网站首页 java按钮字体显示不出来 Swing 关于JPanel背景图片、JButton按钮不显示的解决办法

Swing 关于JPanel背景图片、JButton按钮不显示的解决办法

2023-11-26 07:48| 来源: 网络整理| 查看: 265

本文解决问题:

1.背景图片正常显示,而 JButton 按钮透明,看不到却可以点击。

2.只出现 JButton 按钮而不显示背景图片。

前提:

为 JPanel 设置背景图片常用的两种方式:

1.定义一个 ImageIcon 对象,并指定图片。把这个 ImageIcon 放到一个 JLabel 中,再将这个 JLabel 放到要显示的 JPanel 中。

2.重写要显示的 JPanel 的 protected void paintComponent(Graphics g) 函数,网上也有例子不再赘述。

这里是针对第一种方式遇到的问题,网上的解决方法比较杂,这里是提出自己的总结。

首先,两个基本知识点

一、JFrame 的层次结构

我们主要关注 JLayeredPane 和 Content Pane。为什么呢,因为我们是把背景图片放在 JLayeredPane 上,而把其他组件(JButton、JTextField 等)放在 Content Pane 上。

二、组件的 Opaque 透明属性。setOpaque(boolean) 用来设置组件的透明属性,true 为不透明,false 为透明。

-------------------------------------------分界线-------------------------------------------------- 由上面的知识可得,若出现开头提及的问题1,可能的原因有:

1.背景图片没有放在 JLayeredPane 中,而是和 JButton 放在了同一个 JPanel 并作为 Content Pane 显示出来。

2.按钮设置为了透明。

对于问题2:

1.Content Pane 没有设置为透明。

2.A、B都是 JPanel 对象。若组件(JButton、JTextField 等)放在了 A 上,A 放在 B 上,B 作为 Content Pane,则 A、B 都要设置为透明,否则看不到背景图片。本人就是把多个 JPanel 放在了一个 JPanel container 里,并用CardLayout 布局进行管理,而多个 JPanel 都设置了透明,但这个最底层的 JPanel container 没有设置为透明,一直看不到背景图片。

最后,其实添加背景图片是可以用一个JPanel完成的。

JPanel的add函数参数除了有组件的引用,还有一个重载版本add(JComponent c, Object contraints),第二个参数可以传入一些用作其他用户想做的处理的对象,如排序或者一些别的附带信息。

默认可以传入的整数有-1、0和1,其中如果把背景图片add到JPanel时传入-1,其他组件add到JPanel时传入0,就可以达到想要的效果。

经过测试,只有背景图片附带信息-1(可以省略),其他组件附带信息0(不能省略),可以达到背景图片的效果,其他组合都不行,有兴趣的读者不妨试一试。

如有错误,恳请指出。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3