永发信息网

java JPanel重叠覆盖问题。

答案:3  悬赏:0  手机版
解决时间 2021-03-20 21:41
java JPanel重叠覆盖问题。
最佳答案
一般,在我们覆盖JComponent类及其子类的paint方法时,首先要考虑调用父类的paint方法,由它负责调用paintComponent,paintChildren,paintBorder,update方法,以便在组件位置移动,大小变化时绘制组件
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class paint extends JFrame{
JPanel jp1;
JPanel jp2;
public paint(){
this.add(jp1=new panel1());
jp1.setLayout(null);
jp1.add(jp2 = new panel2());
jp2.setBounds(0, 0, 200, 200);
this.setBounds(400, 200, 200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new paint();
}
}

class panel1 extends JPanel {
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawString("jpanel-1", 20, 20);
}
}

class panel2 extends JPanel {
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawString("jpanel-2", 50, 50);
}
}
全部回答
首先遗憾的告诉你,add方法添加以后,本来就是覆盖式的,不存在透明化的问题,因为父panel会挨次调用子类的panel的paint方法,将其绘制在自己表面。也就是说,你想通过add,然后设置子面板透明的方法本身是行不通的。

但这并不意味着就没有办法了,很简单,你自己管理绘制就可以了。方法有两种:
1、自己修改一个panel类,继承自JPanel,这个类在paint方法中,先绘制本身的图像,然后才绘制子类的图像,并且会根据子类的图像区域进行透明处理。

2、在一个类中,自己通过内部数据处理,把两个panel的数据进行排比,然后统一画在panel中。

PS:通常用的都是第二种办法。第一种办法实现起来,即不灵活,也不如第二种方法直观快速。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这世界上真的有叶罗丽娃娃吗?
我是做催收的,但是不知道怎么说
容是哪个省份的简称
数的多音字组词(3个)
请你和爱一起成长为题写一篇作文四百字以上
升学e网通会员卡80的和200的有什么区别,详细
贵阳市金禾鑫广告有限公司在哪里啊,我有事要
上海市嘉定区安亭镇有哪些店?
168分之14约分成多少
大蒜只是在吃吗
中石化海门市中桥加油站地址在什么地方,我要
车子里面的真皮有印痕怎么消除
澳门耀发香烟价格 红色 硬盒的
广州海拔多少米
啦擦拉你擦拉你几妈 什么歌
推荐资讯
硼酸用来灭蟑螂该怎么用?
星之梦先看TV还是先看剧场版
是不是成功人士都经历过大的失败?
以下各种单色光中,属于三原色光之一的是()
怎么给对方发传真
中国的戏子 都有哪些
第七街奶茶店地址有知道的么?有点事想过去
石震村地址在哪,我要去那里办事
高瞻远瞩的反义词成语
iphone要不要升级到最新版本,太卡了怎么办
剧情比较沉郁 有深度的那种动漫
和我信注册了怎样取消注册
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?