永发信息网

java JPanel重叠覆盖问题。

答案:3  悬赏:0  手机版
解决时间 2021-03-20 21:41
  • 提问者网友:世勋超人
  • 2021-03-19 21:10
java JPanel重叠覆盖问题。
最佳答案
  • 五星知识达人网友:煞尾
  • 2021-03-19 21:23
一般,在我们覆盖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);
}
}
全部回答
  • 1楼网友:拾荒鲤
  • 2021-03-19 21:37
首先遗憾的告诉你,add方法添加以后,本来就是覆盖式的,不存在透明化的问题,因为父panel会挨次调用子类的panel的paint方法,将其绘制在自己表面。也就是说,你想通过add,然后设置子面板透明的方法本身是行不通的。

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

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

PS:通常用的都是第二种办法。第一种办法实现起来,即不灵活,也不如第二种方法直观快速。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯