Swing开发JButton图标效果篇
jopen
11年前
摘要: 本文通过给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(); } }
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);// 隐藏边框 } }
最后上传一张运行的效果图片给大家看!希望对大家有用!