社区
Java SE
帖子详情
paintComponent(g)方法绘制的背景图上面如何添加组件
harrymao20
2011-11-20 04:54:51
添加组件一般都是新建一个JPanel,然后在JPanel上随便添加,可是那样就把背景图片遮盖掉了,有什么办法吗?我试过把JPanel透明,可是没用。
...全文
269
6
打赏
收藏
paintComponent(g)方法绘制的背景图上面如何添加组件
添加组件一般都是新建一个JPanel,然后在JPanel上随便添加,可是那样就把背景图片遮盖掉了,有什么办法吗?我试过把JPanel透明,可是没用。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jlu_lamp_lamp
2011-11-20
打赏
举报
回复
你可以把你的背景图画在JPANEL上
要么就重写它的paintComponent方法
sunyiz
2011-11-20
打赏
举报
回复
你应该有一个 JPanel 作为底层容器
其他的控件都加在这个 JPanel 上
然后重写这个 JPanel 的 paintComponent 方法
最后只要把这个 JPanel 设到 JFrame 上去就好了
setContentPane(xxxxxx);
但是要注意的是,如果你在这个 JPanel 上添加的控件完全填满了它,就是把这个 JPanel 都完全覆盖住了
那你在这个 JPanel 上绘制的背景图片还是会显示不出来
除非你把这个 JPanel 上的那些控件也都一个个的设置 setOpaque(false)
harrymao20
2011-11-20
打赏
举报
回复
设置过不透明了,没用来着
huntor
2011-11-20
打赏
举报
回复
组件不透明
调用 setOpaque(false)试试
harrymao20
2011-11-20
打赏
举报
回复
[Quote=引用 1 楼 sunyiz 的回复:]
重写这个你作为容器的 JPanel 的 paintComponent 方法
第一句调用 super.paintComponent(g);
之后绘制你的背景图
[/Quote]
我就是用super.paintComponent(g);之后绘制的图
然后frame.getContentPane().add(XXXXXX)调用这个方法
然后添加JPanel,就把原来的图片遮盖掉了
sunyiz
2011-11-20
打赏
举报
回复
重写这个你作为容器的 JPanel 的 paintComponent 方法
第一句调用 super.paintComponent(g);
之后绘制你的背景图
java项目-俄罗斯方块
java项目-俄罗斯方块,供学习。 /** * File: GameCanvas.java * User: Administrator * Date: Dec 15, 2003 * Describe: 俄罗斯方块的每一个方块的
绘制
*/ import javax.swing.*; import javax.swing.border.EtchedBorder; //EtchedBorder为swing包中的突出或凹进的边框 import java.awt.*; /** * 画布类,内有<行数> * <列数>个方格类的实例。 * 继承JPanel类。 * ErsBlock线程类动态改变画布类的方格颜色,画布类通过 * 检查方格颜色来体现ErsBlock块的移动情况。 */ class GameCanvas extends JPanel { //默认的方块的颜色为桔黄色,背景颜色为黑色 private Color backColor = Color.black, frontColor = Color.orange; private int rows, cols, score = 0, scoreForLevelUpdate = 0; private ErsBox[][] boxes; private int boxWidth, boxHeight; //score:得分,scoreForLevelUpdate:上一次升级后的积分 /** * 画布类的第一个版本的构造函数 * @param rows int, 画布的行数 * @param cols int, 画布的列数 * 行数和列数以方格为单位,决定着画布拥有方格的数目 */ public GameCanvas(int rows, int cols) { this.rows = rows; this.cols = cols; //初始化rows*cols个ErsBox对象 boxes = new ErsBox[rows][cols]; for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { boxes[i][j] = new ErsBox(false); } } //设置画布的边界 setBorder(new EtchedBorder( EtchedBorder.RAISED, Color.white, new Color(148, 145, 140))); } /** * 画布类的第二个版本的构造函数 * @param rows 与public GameCanvas(int rows, int cols)的rows相同 * @param cols 与public GameCanvas(int rows, int cols)的cols相同 * @param backColor Color, 背景色 * @param frontColor Color, 前景色 */ public GameCanvas(int rows, int cols, Color backColor, Color frontColor) { this(rows, cols); //调用第一个版本的构造函数 this.backColor = backColor; this.frontColor = frontColor; //通过参数设置背景和前景颜色 } /** * 设置游戏背景色彩 * @param backColor Color, 背景色彩 */ public void setBackgroundColor(Color backColor) { this.backColor = backColor; } /** * 取得游戏背景色彩 * @return Color, 背景色彩 */ public Color getBackgroundColor() { return backColor; } /** * 设置游戏方块色彩 * @param frontColor Color, 方块色彩 */ public void setBlockColor(Color frontColor) { this.frontColor = frontColor; } /** * 取得游戏方块色彩 * @return Color, 方块色彩 */ public Color getBlockColor() { return frontColor; } /** * 取得画布中方格的行数 * @return int, 方格的行数 */ public int getRows() { return rows; } /** * 取得画布中方格的列数 * @return int, 方格的列数 */ public int getCols() { return cols; } /** * 取得游戏成绩 * @return int, 分数 */ public int getScore() { return score; } /** * 取得自上一次升级后的积分 * @return int, 上一次升级后的积分 */ public int getScoreForLevelUpdate() { return scoreForLevelUpdate; } /** * 升级后,将上一次升级以来的积分清0 */ public void resetScoreForLevelUpdate() { scoreForLevelUpdate -= ErsBlocksGame.PER_LEVEL_SCORE; } /** * 得到某一行某一列的方格引用。 * @param row int, 要引用的方格所在的行 * @param col int, 要引用的方格所在的列 * @return ErsBox, 在row行col列的方格的引用 */ public ErsBox getBox(int row, int col) { if (row < 0 || row > boxes.length - 1 || col < 0 || col > boxes[0].length - 1) return null; return (boxes[row][col]); } /** * 覆盖J
Component
类的函数,画
组件
。 * @param g 图形设备环境 *
paint
方法
实际上把绘图的主要工作委派给
paint
Component
方法
等
方法
*/ public void
paint
Component
(Graphics g) { super.
paint
Component
(g); g.setColor(frontColor); for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) { //用前景颜色或背景颜色
绘制
每个方块 g.setColor(boxes[i][j].isColorBox() ? frontColor : backColor); g.fill3DRect(j * boxWidth, i * boxHeight, boxWidth, boxHeight, true); } } } /** * 根据窗口的大小,自动调整方格的尺寸 */ public void fanning() { boxWidth = getSize().width / cols; boxHeight = getSize().height / rows; } /** * 当一行被游戏者叠满后,将此行清除,并为游戏者加分 * @param row int, 要清除的行,是由ErsBoxesGame类计算的 */ public synchronized void removeLine(int row) { for (int i = row; i > 0; i--) { for (int j = 0; j < cols; j++) boxes[i][j] = (ErsBox) boxes[i - 1][j].clone(); } score += ErsBlocksGame.PER_LINE_SCORE; scoreForLevelUpdate += ErsBlocksGame.PER_LINE_SCORE; re
paint
(); } /** * 重置画布,置积分为0 */ public void reset() { score = 0; scoreForLevelUpdate = 0; for (int i = 0; i < boxes.length; i++) { for (int j = 0; j < boxes[i].length; j++) boxes[i][j].setColor(false); } re
paint
(); } }
java 窗体
添加
背景图
片_Java Swing实现窗体
添加
背景图
片的2种
方法
详解
本文实例讲述了java Swing实现窗体
添加
背景图
片的2种
方法
。分享给大家供大家参考,具体如下:在美化程序时,常常需要在窗体上
添加
背景图
片。通过搜索和测试,发现了2种有效方式。下面分别介绍。1. 利用JLabel加载图片利用JLabel自带的setIcon(Icon icon)加载icon,并设置JLabel对象的位置和大小使其完全覆盖窗体。这是一个很取巧的办法,代码非常简单,如下所示。JLab...
Java - JFrame 设置
背景图
片
设置JFrame的
背景图
片由两种方式: 1.Jpanel类的
paint
Component
(Graphics g)重新
绘制
背景图
片 2.利用LayeredPane为Swing控件增加了深度,允许组建在需要的时候互相重叠 由低到高的层次是:Default,Palette,Modal,PopUp,Drag运行展示:稍后上传 API查询: Jpanel:http://docs.oracle
java
paint
方法
_java中
paint
方法
和
paint
Component
方法
的不同
/*1.由
Component
.java源代码中可以看见其中的
paint
()
方法
体是空的,在Container中重写了该
方法
,其子类Window等也重写了该
方法
2.由J
Component
.java源代码中可以看见其中的
paint
()
方法
中调用
paint
Component
,
paint
Children,
paint
Border等
方法
;所以该类中的
paint
方法
会影响子
组件
的
绘制
, 而
paint
Comp...
java 如何为一个窗体设置
背景图
片
要为一个窗体
添加
背景图
片,必须知道
绘制
J
Component
组件
的过程。Swing轻量
组件
的
绘制
是
组件
和
组件
UI代表合作的结果。 代码 设置窗体
背景图
片:import java.awt.*; import java.awt.event.*; import javax.swing.
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章