GUI的菜单分为 菜单栏,菜单和菜单项
- 菜单栏和菜单
菜单栏JMenuBar和菜单JMeun
package gui; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); // 菜单栏 JMenuBar mb = new JMenuBar(); // 菜单 JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); // 把菜单加入到菜单栏 mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); // 把菜单栏加入到frame,这里用的是set而非add f.setJMenuBar(mb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
- 菜单项
菜单项JMenuItem
package gui; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 400); f.setLocation(200, 200); JMenuBar mb = new JMenuBar(); JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); // 菜单项 mHero.add(new JMenuItem("近战-Warriar")); mHero.add(new JMenuItem("远程-Range")); mHero.add(new JMenuItem("物理-physical")); mHero.add(new JMenuItem("坦克-Tank")); mHero.add(new JMenuItem("法系-Mage")); mHero.add(new JMenuItem("辅助-Support")); mHero.add(new JMenuItem("打野-Jungle")); mHero.add(new JMenuItem("突进-Charge")); mHero.add(new JMenuItem("男性-Boy")); mHero.add(new JMenuItem("女性-Girl")); // 分隔符 mHero.addSeparator(); mHero.add(new JMenuItem("所有-All")); mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); f.setJMenuBar(mb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
- 工具栏用于存放常用的按钮
工具栏
package gui; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JToolBar; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); // 菜单 addMenu(f); // 工具栏 JToolBar tb = new JToolBar(); // 为工具栏增加按钮 JButton b1 = new JButton(new ImageIcon("e:/project/j2se/1.jpg")); JButton b2 = new JButton(new ImageIcon("e:/project/j2se/2.jpg")); JButton b3 = new JButton(new ImageIcon("e:/project/j2se/3.jpg")); JButton b4 = new JButton(new ImageIcon("e:/project/j2se/4.jpg")); JButton b5 = new JButton(new ImageIcon("e:/project/j2se/5.jpg")); JButton b6 = new JButton(new ImageIcon("e:/project/j2se/6.jpg")); tb.add(b1); tb.add(b2); tb.add(b3); tb.add(b4); tb.add(b5); tb.add(b6); // 把工具栏放在north的位置 f.setLayout(new BorderLayout()); f.add(tb, BorderLayout.NORTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void addMenu(JFrame f) { JMenuBar mb = new JMenuBar(); JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); // 菜单项 mHero.add(new JMenuItem("近战-Warriar")); mHero.add(new JMenuItem("远程-Range")); mHero.add(new JMenuItem("物理-physical")); mHero.add(new JMenuItem("坦克-Tank")); mHero.add(new JMenuItem("法系-Mage")); mHero.add(new JMenuItem("辅助-Support")); mHero.add(new JMenuItem("打野-Jungle")); mHero.add(new JMenuItem("突进-Charge")); mHero.add(new JMenuItem("男性-Boy")); mHero.add(new JMenuItem("女性-Girl")); mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); f.setJMenuBar(mb); } }
- 给按钮设置提示信息
当鼠标放在按钮上的时候会出现提示
package gui; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JToolBar; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); addMenu(f); JToolBar tb = new JToolBar(); JButton b1 = new JButton(new ImageIcon("e:/project/j2se/1.jpg")); JButton b2 = new JButton(new ImageIcon("e:/project/j2se/2.jpg")); JButton b3 = new JButton(new ImageIcon("e:/project/j2se/3.jpg")); JButton b4 = new JButton(new ImageIcon("e:/project/j2se/4.jpg")); JButton b5 = new JButton(new ImageIcon("e:/project/j2se/5.jpg")); JButton b6 = new JButton(new ImageIcon("e:/project/j2se/6.jpg")); tb.add(b1); tb.add(b2); tb.add(b3); tb.add(b4); tb.add(b5); tb.add(b6); // 给按钮设置提示信息 b1.setToolTipText("坑爹英雄"); // 把工具栏放在north的位置 f.setLayout(new BorderLayout()); f.add(tb, BorderLayout.NORTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void addMenu(JFrame f) { JMenuBar mb = new JMenuBar(); JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); // 菜单项 mHero.add(new JMenuItem("近战-Warriar")); mHero.add(new JMenuItem("远程-Range")); mHero.add(new JMenuItem("物理-physical")); mHero.add(new JMenuItem("坦克-Tank")); mHero.add(new JMenuItem("法系-Mage")); mHero.add(new JMenuItem("辅助-Support")); mHero.add(new JMenuItem("打野-Jungle")); mHero.add(new JMenuItem("突进-Charge")); mHero.add(new JMenuItem("男性-Boy")); mHero.add(new JMenuItem("女性-Girl")); mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); f.setJMenuBar(mb); } }
- 禁止工具栏拖动
默认情况下 工具栏可以通过鼠标拖动
setFloatable(false);
可以禁止鼠标拖动功能
package gui; import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JToolBar; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); addMenu(f); JToolBar tb = new JToolBar(); JButton b1 = new JButton(new ImageIcon("e:/project/j2se/1.jpg")); JButton b2 = new JButton(new ImageIcon("e:/project/j2se/2.jpg")); JButton b3 = new JButton(new ImageIcon("e:/project/j2se/3.jpg")); JButton b4 = new JButton(new ImageIcon("e:/project/j2se/4.jpg")); JButton b5 = new JButton(new ImageIcon("e:/project/j2se/5.jpg")); JButton b6 = new JButton(new ImageIcon("e:/project/j2se/6.jpg")); tb.add(b1); tb.add(b2); tb.add(b3); tb.add(b4); tb.add(b5); tb.add(b6); b1.setToolTipText("坑爹英雄"); // 禁止工具栏拖动 tb.setFloatable(false); // 把工具栏放在north的位置 f.setLayout(new BorderLayout()); f.add(tb, BorderLayout.NORTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void addMenu(JFrame f) { JMenuBar mb = new JMenuBar(); JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); // 菜单项 mHero.add(new JMenuItem("近战-Warriar")); mHero.add(new JMenuItem("远程-Range")); mHero.add(new JMenuItem("物理-physical")); mHero.add(new JMenuItem("坦克-Tank")); mHero.add(new JMenuItem("法系-Mage")); mHero.add(new JMenuItem("辅助-Support")); mHero.add(new JMenuItem("打野-Jungle")); mHero.add(new JMenuItem("突进-Charge")); mHero.add(new JMenuItem("男性-Boy")); mHero.add(new JMenuItem("女性-Girl")); mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); f.setJMenuBar(mb); } }
- swing没有自带的日期控件,需要第三方的类
jar包下载
DatePicker datepicker.jar
JXDatePIcker swingx-core-1.6.2.jar
DatePicker
本例使用 datepicker.jar 包,有一个缺点,不能设置时间,只能在创建控件的时候传入指定日期。
需要设置日期,请使用JXDatePicker
package gui; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import java.util.Locale; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import com.eltima.components.ui.DatePicker; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); final DatePicker datepick; datepick = getDatePicker(); f.add(datepick); JButton b = new JButton("获取时间"); b.setBounds(137, 183, 100, 30); f.add(b); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(f, "获取控件中的日期:" + datepick.getValue()); System.out.println(datepick.getValue()); } }); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static DatePicker getDatePicker() { final DatePicker datepick; // 格式 String DefaultFormat = "yyyy-MM-dd HH:mm:ss"; // 当前时间 Date date = new Date(); // 字体 Font font = new Font("Times New Roman", Font.BOLD, 14); Dimension dimension = new Dimension(177, 24); int[] hilightDays = { 1, 3, 5, 7 }; int[] disabledDays = { 4, 6, 5, 9 }; datepick = new DatePicker(date, DefaultFormat, font, dimension); datepick.setLocation(137, 83); datepick.setBounds(137, 83, 177, 24); // 设置一个月份中需要高亮显示的日子 datepick.setHightlightdays(hilightDays, Color.red); // 设置一个月份中不需要的日子,呈灰色显示 datepick.setDisableddays(disabledDays); // 设置国家 datepick.setLocale(Locale.CHINA); // 设置时钟面板可见 datepick.setTimePanleVisible(true); return datepick; } }
- JXDatePicker
本例使用 包swingx-core-1.6.2.jar,界面比较简约,可以设置日期
package gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import org.jdesktop.swingx.JXDatePicker; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); Date date = new Date(); final JXDatePicker datepick = new JXDatePicker(); // 设置 date日期 datepick.setDate(date); datepick.setBounds(137, 83, 177, 24); f.add(datepick); JButton b = new JButton("获取时间"); b.setBounds(137, 183, 100, 30); f.add(b); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取 日期 Date d = datepick.getDate(); JOptionPane.showMessageDialog(f, "获取控件中的日期 :" + d); } }); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
- Swing 皮肤
Java提供了非常便捷的方式切换界面风格
皮肤对应的jar包的下载 Swing样式大全-全56种经典.rar
设置皮肤
只需要提供一句代码
javax.swing.UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
就可以把所有的组件切换成不同的风格。
注: 这句话需要加在最前面,如果已经创建了界面,再加这个有时候不能正常起作用。
package gui; import javax.swing.JButton; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { //设置皮肤 setLookAndFeel(); JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void setLookAndFeel() { try { javax.swing.UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.smart.SmartLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.luna.LunaLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.bernstein.BernsteinLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.mint.MintLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.aero.AeroLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.fast.FastLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.acryl.AcrylLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (Exception e) { e.printStackTrace(); // handle exception } } }