Java问题:1.update和paint方法在什么情况下会被自动调用? 2.update和paint重写之后还会被自动调用么?
如果你直接new一个组件的话,组件是标准外观 如果需要改变组件的外观,最关键的就是要就需要重写组件的paintCoponent(Graphics g)方法,同时需要调整组件的大小
下面用代码说话
下面是结果
这里写图片描述
用到了以下几个类 1.Graphics用来绘画图像, java.awt 2.Dimension用来设置各种大小,java.awt 3.Image用来储存背景的抽象类,java.awt 4.ImageIcon用来创建Image的实例,此类实现了Icon接口,javax.swing
尺寸,偏好尺寸,最小尺寸,最大尺寸 因为并不确定要放进容器的布局 因为当布局为null也就是绝对布局的时候,只需要设置serSize就可以了 当布局不为空时,此时布局管理器会相应的调整图像的尺寸了
当组件的图像太大时,甚至超过了屏幕,此时就需要进行缩放了 处理的地方是
这里就要说说Graphics类中绘制图像的方法了 drawImage(Image image,int x,int y,ImageObserver observer); drawImage(Image image,int x,int y,int width,int height,ImageObserver observer); 第一种方法是没有进行缩放的,第二种方法进行了缩放 缩放后的大小为width*height,缩放的方法可以参照上面代码,进行等比例缩放 至于那个ImageObserver有什么用,我还不知道 API是这样解释的
我的理解是,当设置好了背景之后,并不一定是马上在输出设备上体现出来,需要一定的时间 如果上一个设置图像还在输出的时候又设置一次图像的话,那么方法返回false,并等到上一次设置图像输出完毕了之后,通知指定的图像观察者,图像观察者就调用imageUpdate方法,更新图像
下面还是用代码说话
如果要自定义一个JLabel,有以下几步需要做的: 1.设置icon,JLabel类中有setIcon()方法,也就自然不需要我们来覆写paintComponent方法啦 2.设置Label尺寸 3.设置Label是否有边框 4.设置Label是否透明(这点很重要,直接影响效果(如果面板有背景的话)) 5.设置文本内容 6.设置文本内容和图标的距离##(如果不需要文本内容的话,这时候Label可以直接当成是插入图片去用)##
下面是两种结果,分别是背景透明和背景不透明
这种是设置为不透明
这种是设置为透明
下面仍然是用代码说话
自定义Label和自定义Button的步骤差不多 只是多了边空和边框这两个属性
边空就是当图标和文本都画完了之后,图标和文本离边框还有一定距离时,就会绘画边空了,就是白边 用setMargin(Insets m)可以设置
注意到实例化Insets有四个参数分别是距离上左下右边界的距离
需要注意的是:::::如果不想要边空的话
这样子做的话,是不会起效果的,反而是用了默认边空,由Border对象适当的建立边空
如果想不需要边空的话,只能这样做
setIcon只是设置了这个按钮的默认外观,实际开发还需要设置以下几种外观: 1.光标按下去时的外观——setPressedIcon(ImageIcon) 2.鼠标滚动外观——setRolloverIcon(ImageIcon) 3.选中外观——setSelectedIcon(ImageIcon) …..
下面是结果