Swing——JLabel美化

来源:互联网 发布:淘宝购物怎么走返利 编辑:程序博客网 时间:2024/05/17 01:55

首先,先说明一下组件是怎么绘制的,一般基本组件都是通过paint()方法进行绘制的,而paint()方法则是通过paintComponent()来实现的,而paintComponent()方法最终会转到该方法的BasicUI,也就是说,通过实现一个组件的BasicUI中的所有子方法,便可以达到绘制一个组件的目的。其次,并不一定,美化一个组件就一定要实现它的BasicUI,大部分时候,通过paint()和paintComponent()方法就可以了。所以,通过个性化paint(),paintComponent(),或者BasicUI就可以达到美化的目的啦。是不是很简单吐舌头?下面就来看看如何美化JLabel吧。

package test;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JLabel;
@SuppressWarnings("serial")
public class BeautifyJLabel01 extends JLabel {
 
 /**
  * Create the panel.
  */
 public BeautifyJLabel01() {
  super();
 }
 protected void paintComponent(Graphics g){
  super.paintComponent(g);
  Graphics2D g2d=(Graphics2D)g;
  BasicStroke s=new BasicStroke(5,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
  g2d.setStroke(s);
  g2d.setColor(Color.BLUE);
  g2d.drawLine(this.getX()+5, this.getY()+5, this.getX()+5, this.getHeight()-5);
  g2d.drawLine(this.getX()+5, this.getY()+5, this.getWidth()-5, this.getY()+5);
  g2d.drawLine(this.getWidth()-5, this.getY()+5, this.getWidth()-5, this.getHeight()-5);
  g2d.drawLine(this.getX()+5, this.getHeight()-5, this.getWidth()-5, this.getHeight()-5);
 }
}
上面的代码为JLabel增加了一个蓝色边框,如下图所示。
package test;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import javax.swing.plaf.basic.BasicLabelUI;
public class JLabelUI extends BasicLabelUI{
 @Override
 public void paint(Graphics g, JComponent c){
  super.paint(g,c);
  Graphics2D g2d=(Graphics2D)g;
  BasicStroke s=new BasicStroke(5,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
  g2d.setStroke(s);
  g2d.setColor(Color.BLUE);
  g2d.drawLine(c.getX()+5, c.getY()+5, c.getX()+5, c.getHeight()-5);
  g2d.drawLine(c.getX()+5, c.getY()+5, c.getWidth()-5, c.getY()+5);
  g2d.drawLine(c.getWidth()-5, c.getY()+5, c.getWidth()-5, c.getHeight()-5);
  g2d.drawLine(c.getX()+5, c.getHeight()-5, c.getWidth()-5, c.getHeight()-5);
 }
}
上面代码和最上面的代码的图片效果是一样的。