Java Swing Ribbon(Flamingo)的使用04:按钮模式更改
2014-11-02 23:07
573 查看
这篇文章将简单介绍一下Ribbon中常用的控件按钮使用的方式和代码实现的过程。在看这篇文章之前建议先看如下的一些文章。当然如果对Flamino-Ribbon已经有一些基本的了解的则不用看了。
01.关于Flamingo-Ribbon的安装与使用:Flamingo-Ribbon的使用01:安装与初始使用
02.关于Fiamingo-Ribbon界面风格设置:Flamingo-Ribbon的使用02:更改界面风格
03.关于Flamingo-Ribbon按钮样式更改:Flamingo-Ribbon的使用03:按钮中添加图片和更改样式
对于上述代码,有一个RibbonTask对象,该Task中有两个Band:“文件”和“操作”。将Band添加到Task方法很简单。如果有多个Band只要在Task构造方法依次写出来即可,例如:
其完整代码如下:
运行上述代码结果如下:
其完整代码如下:
点击按钮:
4 RibbonContextualTaskGroup
有时不是希望所有菜单都一直显示的。例如在Word 2013中,“图片工具”菜单和“表格工具”菜单只有在选中了图片或者表格后才会显示出来。当取消选中图片或者表格时,这种菜单就会隐藏,如下图的Word 2013所示:
这种菜单在Flamingo-Ribbon中可通过RibbonContextualTaskGroup来实现。其代码为:
其完整代码如下:
(未完待续)
01.关于Flamingo-Ribbon的安装与使用:Flamingo-Ribbon的使用01:安装与初始使用
02.关于Fiamingo-Ribbon界面风格设置:Flamingo-Ribbon的使用02:更改界面风格
03.关于Flamingo-Ribbon按钮样式更改:Flamingo-Ribbon的使用03:按钮中添加图片和更改样式
1 一个Task中添加多个Band
如果需要在一个Task(RibbonTask)中添加多个Band(JRibbonBand),则可以在新建Task的时候将Band对象作为构造函数的参数即可,代码如下:import java.awt.Dimension; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.pushingpixels.flamingo.api.common.JCommandButton; import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon; import org.pushingpixels.flamingo.api.common.icon.ResizableIcon; import org.pushingpixels.flamingo.api.ribbon.JRibbonBand; import org.pushingpixels.flamingo.api.ribbon.JRibbonFrame; import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; import org.pushingpixels.flamingo.api.ribbon.RibbonTask; import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies; import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy; public class MainFrame extends JRibbonFrame { static { // 设置界面风格:获取系统样式 try { javax.swing.UIManager.setLookAndFeel( "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } //根据图片的地址获取该图片,返回ResizableIcon public static ResizableIcon getResizableIconFromResource(String resource) { return ImageWrapperResizableIcon.getIcon( MainFrame.class.getClassLoader().getResource(resource), new Dimension(48, 48)); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); //windows功能失效 JDialog.setDefaultLookAndFeelDecorated(true); //Dialog功能失效 SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void run() { MainFrame frame = new MainFrame(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); JRibbonBand fileBand = new JRibbonBand("文件", null); //新建一个Band JRibbonBand operBand = new JRibbonBand("操作", null); //新建一个Band fileBand.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(fileBand.getControlPanel()), new IconRibbonBandResizePolicy(fileBand.getControlPanel()))); operBand.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(fileBand.getControlPanel()), new IconRibbonBandResizePolicy(fileBand.getControlPanel()))); JCommandButton button1 = new JCommandButton("Square", getResizableIconFromResource("resources/Project.png")); JCommandButton button2 = new JCommandButton("Circle", getResizableIconFromResource("resources/Clear.png")); JCommandButton button3 = new JCommandButton("Triangle", getResizableIconFromResource("resources/ZoomOut.png")); JCommandButton button4 = new JCommandButton("Star", getResizableIconFromResource("resources/ZoomIn.png")); fileBand.addCommandButton(button1, RibbonElementPriority.TOP); fileBand.addCommandButton(button2, RibbonElementPriority.MEDIUM); operBand.addCommandButton(button3, RibbonElementPriority.TOP); operBand.addCommandButton(button4, RibbonElementPriority.MEDIUM); //新建一个Task,并将Band添加到该Task中去 RibbonTask task1 = new RibbonTask("One", fileBand, operBand); //先获取Ribbon,然后在Ribbon上添加一个Task frame.getRibbon().addTask(task1); frame.pack(); frame.setVisible(true); } }); } }运行结果如下:
对于上述代码,有一个RibbonTask对象,该Task中有两个Band:“文件”和“操作”。将Band添加到Task方法很简单。如果有多个Band只要在Task构造方法依次写出来即可,例如:
RibbonTask task1 = new RibbonTask("One", band1, band2, band3, band4, band5, band6);这样共添加了6个Band。
2 添加下拉菜单按钮
下拉菜单按钮其实还是按钮(JCommandButton),只是展示方式不同,因此在编写代码时需要修改JCommandButton的属性即可,其代码为:JCommandButton btnLyrSelect = new JCommandButton("图层选择"); btnLyrSelect.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); btnLyrSelect.setPopupCallback(new PopupPanelCallback() { @Override public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandPopupMenu menu = new JCommandPopupMenu(); menu.addMenuButton(new JCommandMenuButton("你好Menu", getResizableIconFromResource("cn/edu/njnu/resources/Project.png"))); menu.addMenuButton(new JCommandMenuButton("HelloMenu", null)); menu.addMenuSeparator(); return menu; } });
其完整代码如下:
import java.awt.Dimension; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.pushingpixels.flamingo.api.common.JCommandButton; import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind; import org.pushingpixels.flamingo.api.common.JCommandMenuButton; import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon; import org.pushingpixels.flamingo.api.common.icon.ResizableIcon; import org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu; import org.pushingpixels.flamingo.api.common.popup.JPopupPanel; import org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback; import org.pushingpixels.flamingo.api.ribbon.JRibbonBand; import org.pushingpixels.flamingo.api.ribbon.JRibbonFrame; import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; import org.pushingpixels.flamingo.api.ribbon.RibbonTask; import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies; import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy; public class MainFrame extends JRibbonFrame { static { // 设置界面风格:获取系统样式 try { javax.swing.UIManager.setLookAndFeel( "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } //根据图片的地址获取该图片,返回ResizableIcon public static ResizableIcon getResizableIconFromResource(String resource) { return ImageWrapperResizableIcon.getIcon( MainFrame.class.getClassLoader().getResource(resource), new Dimension(48, 48)); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); //windows功能失效 JDialog.setDefaultLookAndFeelDecorated(true); //Dialog功能失效 SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void run() { MainFrame frame = new MainFrame(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); JRibbonBand fileBand = new JRibbonBand("文件", null); //新建一个Band fileBand.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(fileBand.getControlPanel()), new IconRibbonBandResizePolicy(fileBand.getControlPanel()))); JCommandButton btnLyrSelect = new JCommandButton("图层选择"); btnLyrSelect.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); btnLyrSelect.setPopupCallback(new PopupPanelCallback() { @Override public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandPopupMenu menu = new JCommandPopupMenu(); menu.addMenuButton(new JCommandMenuButton("你好Menu", getResizableIconFromResource("cn/edu/njnu/resources/Project.png"))); menu.addMenuButton(new JCommandMenuButton("HelloMenu", null)); menu.addMenuSeparator(); return menu; } }); fileBand.addCommandButton(btnLyrSelect, RibbonElementPriority.TOP); //新建一个Task,并将Band添加到该Task中去 RibbonTask task1 = new RibbonTask("One", fileBand); //先获取Ribbon,然后在Ribbon上添加一个Task frame.getRibbon().addTask(task1); frame.pack(); frame.setVisible(true); } }); } }
运行上述代码结果如下:
3 富弹出按钮(Rich Popups)
Rich Popups按钮其实还是按钮(JCommandButton),只是展示方式不同,因此在编写代码时需要修改JCommandButton的属性即可,其代码为:btnLyrSelect.setDisplayState(CommandButtonDisplayState.BIG); btnLyrSelect.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); btnLyrSelect.setPopupCallback(new PopupPanelCallback() { @Override public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandButtonPanel panel = new JCommandButtonPanel(CommandButtonDisplayState.BIG); panel.addButtonGroup("group1"); panel.addButtonGroup("group2"); panel.addButtonToGroup("group1", new JCommandButton("1")); panel.addButtonToGroup("group1", new JCommandButton("2")); panel.addButtonToGroup("group1", new JCommandButton("3")); panel.addButtonToGroup("group1", new JCommandButton("4")); panel.addButtonToGroup("group1", new JCommandButton("5")); panel.addButtonToGroup("group2", new JCommandButton("6")); panel.addButtonToGroup("group2", new JCommandButton("7")); panel.addButtonToGroup("group2", new JCommandButton("8")); JCommandPopupMenu menu = new JCommandPopupMenu(panel, 5, 5); menu.setAutoscrolls(true); return menu; } });
其完整代码如下:
import java.awt.Dimension; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.pushingpixels.flamingo.api.common.CommandButtonDisplayState; import org.pushingpixels.flamingo.api.common.JCommandButton; import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind; import org.pushingpixels.flamingo.api.common.JCommandButtonPanel; import org.pushingpixels.flamingo.api.common.JCommandMenuButton; import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon; import org.pushingpixels.flamingo.api.common.icon.ResizableIcon; import org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu; import org.pushingpixels.flamingo.api.common.popup.JPopupPanel; import org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback; import org.pushingpixels.flamingo.api.ribbon.JRibbonBand; import org.pushingpixels.flamingo.api.ribbon.JRibbonFrame; import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; import org.pushingpixels.flamingo.api.ribbon.RibbonTask; import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies; import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy; public class MainFrame extends JRibbonFrame { static { // 设置界面风格:获取系统样式 try { javax.swing.UIManager.setLookAndFeel( "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } //根据图片的地址获取该图片,返回ResizableIcon public static ResizableIcon getResizableIconFromResource(String resource) { return ImageWrapperResizableIcon.getIcon( MainFrame.class.getClassLoader().getResource(resource), new Dimension(48, 48)); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); //windows功能失效 JDialog.setDefaultLookAndFeelDecorated(true); //Dialog功能失效 SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void run() { MainFrame frame = new MainFrame(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); JRibbonBand fileBand = new JRibbonBand("文件", null); //新建一个Band fileBand.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(fileBand.getControlPanel()), new IconRibbonBandResizePolicy(fileBand.getControlPanel()))); JCommandButton btnLyrSelect = new JCommandButton("图层选择"); btnLyrSelect.setDisplayState(CommandButtonDisplayState.BIG); btnLyrSelect.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); btnLyrSelect.setPopupCallback(new PopupPanelCallback() { @Override public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandButtonPanel panel = new JCommandButtonPanel(CommandButtonDisplayState.BIG); panel.addButtonGroup("group1"); panel.addButtonGroup("group2"); panel.addButtonToGroup("group1", new JCommandButton("1")); panel.addButtonToGroup("group1", new JCommandButton("2")); panel.addButtonToGroup("group1", new JCommandButton("3")); panel.addButtonToGroup("group1", new JCommandButton("4")); panel.addButtonToGroup("group1", new JCommandButton("5")); panel.addButtonToGroup("group2", new JCommandButton("6")); panel.addButtonToGroup("group2", new JCommandButton("7")); panel.addButtonToGroup("group2", new JCommandButton("8")); JCommandPopupMenu menu = new JCommandPopupMenu(panel, 5, 5); menu.setAutoscrolls(true); return menu; } }); fileBand.addCommandButton(btnLyrSelect, RibbonElementPriority.TOP); //新建一个Task,并将Band添加到该Task中去 RibbonTask task1 = new RibbonTask("One", fileBand); //先获取Ribbon,然后在Ribbon上添加一个Task frame.getRibbon().addTask(task1); frame.pack(); frame.setVisible(true); } }); } }运行上述代码结果如下:
点击按钮:
4 RibbonContextualTaskGroup
有时不是希望所有菜单都一直显示的。例如在Word 2013中,“图片工具”菜单和“表格工具”菜单只有在选中了图片或者表格后才会显示出来。当取消选中图片或者表格时,这种菜单就会隐藏,如下图的Word 2013所示:这种菜单在Flamingo-Ribbon中可通过RibbonContextualTaskGroup来实现。其代码为:
//设置Group private static void setGroup(JRibbon ribbon, RibbonTask task) { //ContextualTaskGroup RibbonContextualTaskGroup r = new RibbonContextualTaskGroup("图层", new Color(200, 40, 150), task); ribbon.addContextualTaskGroup(r); ribbon.setVisible(r, true); }
其完整代码如下:
import java.awt.Color; import java.awt.Dimension; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.pushingpixels.flamingo.api.common.CommandButtonDisplayState; import org.pushingpixels.flamingo.api.common.JCommandButton; import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind; import org.pushingpixels.flamingo.api.common.JCommandButtonPanel; import org.pushingpixels.flamingo.api.common.JCommandMenuButton; import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon; import org.pushingpixels.flamingo.api.common.icon.ResizableIcon; import org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu; import org.pushingpixels.flamingo.api.common.popup.JPopupPanel; import org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback; import org.pushingpixels.flamingo.api.ribbon.JRibbon; import org.pushingpixels.flamingo.api.ribbon.JRibbonBand; import org.pushingpixels.flamingo.api.ribbon.JRibbonFrame; import org.pushingpixels.flamingo.api.ribbon.RibbonContextualTaskGroup; import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; import org.pushingpixels.flamingo.api.ribbon.RibbonTask; import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies; import org.pushingpixels.flamingo.api.ribbon.resize.IconRibbonBandResizePolicy; public class MainFrame extends JRibbonFrame { static { // 设置界面风格:获取系统样式 try { javax.swing.UIManager.setLookAndFeel( "org.pushingpixels.substance.api.skin.SubstanceOfficeBlue2007LookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } //根据图片的地址获取该图片,返回ResizableIcon public static ResizableIcon getResizableIconFromResource(String resource) { return ImageWrapperResizableIcon.getIcon( MainFrame.class.getClassLoader().getResource(resource), new Dimension(48, 48)); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); //windows功能失效 JDialog.setDefaultLookAndFeelDecorated(true); //Dialog功能失效 SwingUtilities.invokeLater(new Runnable() { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void run() { MainFrame frame = new MainFrame(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); JRibbonBand band = new JRibbonBand("文件", null); //新建一个Band band.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(band.getControlPanel()), new IconRibbonBandResizePolicy(band.getControlPanel()))); JCommandButton button1 = new JCommandButton("Square", getResizableIconFromResource("resources/Project.png")); JCommandButton button2 = new JCommandButton("Circle", getResizableIconFromResource("resources/Clear.png")); JCommandButton button3 = new JCommandButton("Triangle", getResizableIconFromResource("resources/ZoomOut.png")); JCommandButton button4 = new JCommandButton("Star", getResizableIconFromResource("resources/ZoomIn.png")); band.addCommandButton(button1, RibbonElementPriority.TOP); band.addCommandButton(button2, RibbonElementPriority.MEDIUM); band.addCommandButton(button3, RibbonElementPriority.MEDIUM); band.addCommandButton(button4, RibbonElementPriority.MEDIUM); //新建一个Task,并将Band添加到该Task中去 RibbonTask task1 = new RibbonTask("One", band); JRibbon ribbon = frame.getRibbon(); ribbon.addTask(task1); setGroup(ribbon, task1); frame.pack(); frame.setVisible(true); } }); } //设置Group private static void setGroup(JRibbon ribbon, RibbonTask task) { //ContextualTaskGroup RibbonContextualTaskGroup r = new RibbonContextualTaskGroup("图层", new Color(200, 40, 150), task); ribbon.addContextualTaskGroup(r); ribbon.setVisible(r, true); } }代码上述运行结果如下:
(未完待续)
相关文章推荐
- Java Swing Ribbon(Flamingo)的使用03:按钮样式
- Java Swing Ribbon(Flamingo)的使用02:更改界面风格
- Java Swing Ribbon(Flamingo)的使用05:小组件
- Java Swing Ribbon(Flamingo)的使用06:添加JComponent组件
- Java Swing Ribbon(Flamingo)的使用07:长廊Gallery的使用
- Java Swing Ribbon(Flamingo)的使用01:安装与初始使用
- [Java Swing 大富翁] swing下使用JPanel 模拟 按钮实现。
- 关于 java swing 使用按钮关闭窗口
- 关于 java swing 使用按钮关闭窗口
- Java的Swing编程中使用SwingWorker线程模式及顶层容器
- JAVA界面组件---swing标签与按钮的使用与介绍
- java swing 图片按钮的使用
- 通过 Java Swing 看透 MVC 设计模式
- Java的秘密武器:使用全屏幕模式
- JavaServer Faces框架使用的设计模式
- JAVA组件大全 复选框、选项按钮、列表方框、下拉式列表的使用与介绍
- JavaServer Faces框架使用的设计模式
- JavaServer Faces框架使用的设计模式
- 小技巧:Java Swing中使用双击事件
- 使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 1 部分: 实现调用模式