自定义JButton

直接贴代码,后续再更改:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.seek4.swing.demo;

import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 *
 * @author rslee 自定义button类,可以直接绘制icon
 */
public class MyButton extends JButton {

    public MyButton(String img) {
        this(getIcon(img));
    }

    public MyButton(ImageIcon icon) {
        setSize(icon.getImage().getWidth(null), icon.getImage().getHeight(null));
        setIcon(icon);
        setMargin(new Insets(0, 0, 0, 0)); //设置按钮边框和标签之间的空白  
        setIconTextGap(0);   //设置文本间隙  
        setBorderPainted(false); //设置是否允许绘制边框  

        setBorder(null);
        setText(null);
        //设置背景透明
//        this.setOpaque(false);
        //设置边框背景色透明
        setContentAreaFilled(false);
    }

    private static ImageIcon getIcon(String iconName) {
        URL url = MyButton.class.getResource("/cn/seek4/swing/resource/" + iconName);
        if (url != null) {
            return new ImageIcon(url);
        } else {
            System.out.println("加载icon失败:" + iconName);
        }
        return null;
    }

    //测试
    private static void createAndShowUI() {
        JFrame frame = new JFrame("自定义button实验");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(200, 100));
        
        JButton button = new MyButton("accept.png");
        button.setActionCommand("add");
        
        //设置按下的时候切换的icon
        button.setPressedIcon(getIcon("add.png"));
        
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("accept button is click:"+e.getActionCommand());
            }
        });
        
        panel.add(button);

        frame.add(panel);

        frame.setPreferredSize(new Dimension(210, 110));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}


你可能感兴趣的:(java,swing)