JPanle、JButton、JLabel等等组件,若想实现漂亮的外观,可以通过实现paintComponent(Graphics g)来完成。
示例:自定义JButton的鼠标经过与鼠标离开的效果。
一、新建NewButton类
package background;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
public class NewButton extends JButton {
ImageIcon icon = null;
public NewButton(){
setBorder(null);//取消边框
icon = new ImageIcon("button1.png");
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
//鼠标离开
icon = new ImageIcon("button1.png");
repaint();//重绘图形,调用paintComponent
}
@Override
public void mouseEntered(MouseEvent e) {
//鼠标经过
icon = new ImageIcon("button2.png");
repaint();
}
});
}
public void paintComponent(Graphics g){
int x=0,y=0;
g.drawImage(icon.getImage(), x, y, 95, 32, this);
}
}
二、主窗口JFrameDemo
package background;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class JFrameDemo extends JFrame {
public JFrameDemo(){
super("Jpanel Background Demo");//窗口标题
NewButton b2 = new NewButton();
this.getContentPane().add(b2);//将button加入窗口
this.setSize(95, 32);
this.setLocationRelativeTo(null);//设置窗口居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
new JPanelDemo();
}
}
通过实现paintComponent可以实现各个组件的自定义外观。