关于JFrame背景边框以及paint 和paintComponents

    今天偶然又拾起swing相关知识,突然看到以前自己对于JFrame背景和边框的处理。

    发现以前对这两点的处理自己现在怎么有些看不懂了,首先是关于背景的处理,我们其实实现是对JPanel的重绘,其次为了实现对边框的处理我们做了很多工作才实现,可是自己明明看见有类似setBorder的方法啊,而且我们使用的一般是paintComponents方法,我们为什么不使用paint方法呢?二者又有什么区别呢?

    首先是关于我们为什么不使用setBorder对JFrame实现边框重绘呢?

    后来查阅了API才知道,setBorder是JComponent的方法,我们一般如JPanel,JButton等才继承自该类,才能实现对边框的改变。而我们的JFrame其实是继承自Window所以二者虽然在Container之前的继承都一样,但是JComponent和Window分别是Container的两个子类,也就是说在这里二者就不同了。所以我们的setBorder方法只对继承自JComponent的子类有用。

    其次是关于paint和paintComponent的区别,其实我们只要查一下就能很清楚的发现二者的区别,paint :由 Swing 调用,以绘制组件。此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。所以只想特殊化 UI(外观)委托的 paint 方法的子类只需重写 paintComponent。

    最后我们不对JFrame重绘其实是倒不是不能对JFrame进行重绘,而是我们一般对JFrame的操作都是集中在对contentPanel的操作上通过实现对JPanel背景的重绘然后将其设置成ContentPanel很方便。其次主要是对于背景大小的操作很方便。

public void paint (Graphics g){

    g.drawImage(backGroundImage, 0, 0, width, height, null);
    super.paint(g);

   其实我们每学一段时间Java之后反过来看一下以前所学,往往能把以前所遗忘或者以前不是很清楚的东西搞明白,这也是一种学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值