Swing開發JButton圖標效果篇

jopen 11年前發布 | 87K 次閱讀 Swing Java開發

摘要: 本文通過給JButton添加鼠標事件,對JButton一個簡單的美化

    JButton是AbstractButton類的擴展,當按鈕被選中,點擊時會出現不同的狀態,Swing本身的展示效果在繪制面板的時候不盡人意,因此可以通過更改按鈕的鼠標事件來美化按鈕。

    1.TestFrame.java,用于繪制主面板的組件,以下是源碼:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Insets;

import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicButtonUI;

public class TestFrame extends JFrame {

private JTextField searchText = null;
private JButton searchBtn = null;
private JButton editBtn = null;
private JButton saveBtn = null;

public TestFrame() {
    setLookAndFeel();
    init();
}

/**
 * 為主面板設置皮膚
 */
private void setLookAndFeel() {
    try {
        UIManager
                .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 增加工具欄的組件,并設置樣式
 */
private JMenuBar addMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    menuBar.setLayout(new FlowLayout(40, 4, 0));
    // 增加文件選擇按鈕
    menuBar.add(createBtn("File", "./src/folder_up.png"));

    // 增加編輯按鈕
    editBtn = createBtn("Edit", "./src/page_edit.png");
    //editBtn.setEnabled(false);
    menuBar.add(editBtn);

    // 增加保存文件按鈕
    saveBtn = createBtn("Save", "./src/folder_down.png");
    //saveBtn.setEnabled(false);
    menuBar.add(saveBtn);

    // 增加查詢輸入文本框
    searchText = new JTextField();
    searchText.setPreferredSize(new Dimension(140, 27));
    menuBar.add(searchText);

    // 增加查詢按鈕
    searchBtn = createBtn("Search", "./src/search.png");
    //searchBtn.setEnabled(false);
    menuBar.add(searchBtn);

    return menuBar;
}

/**
 * 創建工具欄按鈕
 * 
 * @author lqj
 * @param text
 *            按鈕名稱
 * @param icon
 *            按鈕圖標所在路徑
 * @return 返回添加樣式和監聽器后的按鈕
 */
private JButton createBtn(String text, String icon) {
    JButton btn = new JButton(text, new ImageIcon(icon));
    btn.setUI(new BasicButtonUI());// 恢復基本視覺效果
    btn.setPreferredSize(new Dimension(80, 27));// 設置按鈕大小
    btn.setContentAreaFilled(false);// 設置按鈕透明
    btn.setFont(new Font("粗體", Font.PLAIN, 15));// 按鈕文本樣式
    btn.setMargin(new Insets(0, 0, 0, 0));// 按鈕內容與邊框距離
    btn.addMouseListener(new MyMouseListener(this));
    return btn;
}

/**
 * @author lqj
 * 初始化主面板和工作欄內容
 */
private void init() {

    JMenuBar menuBar = addMenuBar();
    // menuBar.setBackground(Color.WHITE);
    menuBar.setPreferredSize(new Dimension(1400, 30));
    this.setJMenuBar(menuBar);
    this.setSize(1320, 750);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    this.setTitle("TestButton");
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    // this.setBackground(Color.gray);
}

// main
public static void main(String[] args) {
    new TestFrame();
}

}</pre>

    2.MyMouseListener.java,用于增加鼠標事件,源碼如下:

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;

public class MyMouseListener implements MouseListener {

    private TestFrame frame;

    public MyMouseListener() {
        // TODO Auto-generated constructor stub
    }

    public MyMouseListener(TestFrame f) {
        this.frame = f;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        String btnName =((JButton)e.getSource()).getText();
        if ("File".equals(btnName.trim())) {
            //鼠標點擊事件
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        JButton btn = (JButton) e.getComponent();
        Border etchedBorder = new EtchedBorder(EtchedBorder.RAISED);// 設置邊框凸顯
        btn.setBorder(etchedBorder);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        JButton btn = (JButton) e.getComponent();
        Border etchedBorder = new EtchedBorder(EtchedBorder.LOWERED);// 設置邊框凹顯
        btn.setBorder(etchedBorder);
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        JButton btn = (JButton) e.getComponent();
        btn.setForeground(new Color(0x33, 0x66, 0xcc));// 設置字體顏色
        btn.setBorderPainted(true);// 顯示邊框
        Border etchedBorder = new EtchedBorder(EtchedBorder.LOWERED);// 設置邊框凹顯
        btn.setBorder(etchedBorder);
        btn.setRolloverEnabled(true);
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        JButton btn = (JButton) e.getComponent();
        btn.setForeground(Color.black);// 設置字體顏色
        btn.setBorderPainted(false);// 隱藏邊框
    }

}

最后上傳一張運行的效果圖片給大家看!希望對大家有用!

Swing開發JButton圖標效果篇

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!