火烈鸟 即时通讯_火烈鸟教程

火烈鸟 即时通讯

在本文中,我将为您提供文档,以轻松使用Flamingo框架,更准确地说是其功能区小部件。

介绍

永远不要说微软永远不会创新:在Office中,它引入了一个有趣的概念,即功能区。

Microsfot Office功能区栏

功能区是一种工具栏。 但是,虽然工具栏是固定的,但是功能区的布局可以根据其显示的宽度而改变。 如果您有这样的应用程序,只需使用它几秒钟,您就会发现魔术发生了。

最新版本的Swing没有此类小部件。 但是,我在java.net上找到了Flamingo项目 。 火烈鸟制作的示例看起来与Office非常相似。

Famingo色带栏

首次尝试使用Flamingo并非易事,因为除了Javadocs和测试应用程序的源代码之外,网络上没有任何文档。 以下是我开始尝试和错误之旅以来的理解。

基础

语义学

  • 功能区是上面截图中的大条。 一个框架只能有一条色带
  • 任务是一个或多个频段的选项卡式组。 在屏幕截图上,任务是页面布局,编写,动画等。
  • 带是一组一个或多个小部件。 在屏幕截图上,带是剪贴板,快速样式,字体等。

基本概念

工具栏上的按钮和功能区栏中的带区之间的核心区别在于,带区的大小可以调整。 例如,这些是显示文档带的步骤,涉及其相对宽度和色带宽度。

第1步 第2步 第三步 第4步-图标化

最后一步称为图标化状态。 当您单击按钮时,它将整个乐队显示为弹出窗口。

你的第一个丝带

建立

为了使用Flamingo框架,第一步是下载它 。 如果您使用的是Maven,祝您好运! 我在中央库或java.net存储库中都找不到火烈鸟。 因此,无论如何都要下载并手动将其安装在本地(或企业)存储库中。 有关信息,我选择了net.java.dev.flamingo:flamingo位置。

框架

如果您从头开始,那么您很幸运。 只需继承自JRibbonFrame :方法getRibbon()将为您提供功能区实例的引用。 从那里,您将能够向其中添加任务。

但是,您可能已经拥有了自己的框架层次结构。 在这种情况下,您必须实例化JRibbon并将其添加到BorderLayout -ed框架的NORTH位置。

在这两种情况下,结果都应类似于以下内容:

空白JRibbonFrame

添加任务

任务代表逻辑带分组。 它们看起来像标签,并且也扮演了角色。 让我们添加两个这样的任务,分别命名为“ One”和“ Two”。

publicclassMainFrameextendsJRibbonFrame{

  publicstaticvoidmain(String[]args){

    SwingUtilities.invokeLater(newRunnable(){

      @Override
      publicvoidrun(){
        MainFrameframe=newMainFrame();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        RibbonTasktask1=newRibbonTask("One");
        RibbonTasktask2=newRibbonTask("Two");
        frame.getRibbon().addTask(task1);
        frame.getRibbon().addTask(task2);
      }
    });
  }
}

注意getRibbon()上的JRibbonFrame getRibbon()方法。 它是功能区栏上的参考。

还要注意, addTask()方法addTask()接受任务,也接受JRibbonBand 。 而且,如果您启动上述代码,它将严重失败,并显示以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot have empty ribbon task
  at org.jvnet.flamingo.ribbon.RibbonTask.<init>(RibbonTask.java:85)
  at MainFrame$1.run(MainFrame.java:37)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

添加乐队

为了满足我们的火烈鸟朋友,让我们为每个任务添加一个功能区。 JRibbonBand的构造JRibbonBand采用两个参数,即标签和先前未知类ResizableIcon的实例。 下一节将详细介绍。

到目前为止,如果仅使用对JRibbonBand的引用创建RibbonTask并启动该应用程序,则会收到以下错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Inconsistent preferred widths
Ribbon band 'Hello has the following resize policies
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$None with preferred width -4
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$Low2Mid with preferred width -4
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$Mid2Mid with preferred width -4
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$Mirror with preferred width -4
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$Mid2Low with preferred width -4
  org.jvnet.flamingo.ribbon.resize.CoreRibbonResizePolicies$High2Mid with preferred width -4
  org.jvnet.flamingo.ribbon.resize.IconRibbonBandResizePolicy with preferred width 42

还记得乐队的大小吗? 火烈鸟需要有关如何做的信息。 在初始显示之前,它将检查这些策略是否一致。 默认情况下,它们不是,这就是它抱怨的原因:Flamingo要求您至少拥有必须放在最后的图标化策略。 但是,在大多数情况下,您需要在策略列表中至少具有正常显示。

让我们修改代码来做到这一点:

JRibbonBandband1=newJRibbonBand("Hello",null);
JRibbonBandband2=newJRibbonBand("world!",null);
band1.setResizePolicies((List)Arrays.asList(newIconRibbonBandResizePolicy(band1.getControlPanel())));
band2.setResizePolicies((List)Arrays.asList(newIconRibbonBandResizePolicy(band1.getControlPanel())));
RibbonTasktask1=newRibbonTask("One",band1);
RibbonTasktask2=newRibbonTask("Two",band2);

前面的代码至少让我们看到了一些东西:

丝带带

添加按钮(最后!)

即使前一个编译并运行,它仍然没有兴趣。 现在是时候添加一些按钮了!

JCommandButtonbutton1=newJCommandButton("Square",null);
JCommandButtonbutton2=newJCommandButton("Circle",null);
JCommandButtonbutton3=newJCommandButton("Triangle",null);
JCommandButtonbutton4=newJCommandButton("Star",null);
band1.addCommandButton(button1,TOP);
band1.addCommandButton(button2,MEDIUM);
band1.addCommandButton(button3,MEDIUM);
band1.addCommandButton(button4,MEDIUM);

太可惜了,没有结果! 我们的按钮在哪里? 好吧,它们隐藏得很好。 还记得调整大小的政策吗? 只有一个,图标化的状态,其目的只是显示图标化的状态。 只需使用以下代码更新策略行:

band1.setResizePolicies((List)Arrays.asList(
  newCoreRibbonResizePolicies.None(band1.getControlPanel()),
  newIconRibbonBandResizePolicy(band1.getControlPanel())));

最初的结果看起来是一样的,但是当您调整框架的大小时,它看起来像这样:

命令按钮

即使它在视觉上不是很吸引人,它看起来也比以前更好。 我们在四个按钮上看到了taks,乐队的名称和标签。

可调整大小的图标

JCommandButton构造函数具有2个参数:一个用于标签,另一个用于特殊的Flamingo类ResizableIcon 。 由于Flamingo都是要以不同的大小显示相同的按钮,因此不足为奇。 可调整大小的图标可以从Image ,ico资源甚至SVG构建。

让我们在框架中添加一个实用程序方法,并为UI增添趣味:

publicstaticResizableIcongetResizableIconFromResource(Stringresource){
  returnImageWrapperResizableIcon.getIcon(MainFrame.class.getClassLoader().getResource(resource),newDimension(48,48));
}

...

JCommandButtonbutton1=newJCommandButton("Square",getResizableIconFromResource("path"));
JCommandButtonbutton2=newJCommandButton("Circle",getResizableIconFromResource("to"));
JCommandButtonbutton3=newJCommandButton("Triangle",getResizableIconFromResource("the"));
JCommandButtonbutton4=newJCommandButton("Star",getResizableIconFromResource("resource"));

band1.addCommandButton(button1,TOP);
band1.addCommandButton(button2,MEDIUM);
band1.addCommandButton(button3,MEDIUM);
band1.addCommandButton(button4,MEDIUM);

这会更令人满意:

可调整大小的图标

选择政策

现在,我们准备好应对Flamingo的核心业务,调整规模。 如果您拥有Office并使用它,您会发现调整大小策略非常丰富。 而且我们以前也看到过,只有两个微不足道的策略,我们可以看到图标显示或完整显示。

让我们看看如何走得更远。 你可能会注意到addCommandButton()JRibbonBand有2个参数:按钮添加和优先级。 火烈鸟使用此优先级和策略来选择如何显示乐队。

优先级如下: TOPMEDIUMLOW

政策是:

政策 描述

CoreRibbonResizePolicies.None

Command buttons will be represented in the TOP state (big button with label and icon)

CoreRibbonResizePolicies.Mid2Mid

Command buttons that have MEDIUM priority will be represented in the MEDIUM state (small button with label and icon)

CoreRibbonResizePolicies.Mid2Low

Command buttons that have MEDIUM priority will be represented in the LOW state (small button only icon)

CoreRibbonResizePolicies.High2Mid

Command buttons that have HIGH priority will be represented in the MEDIUM state

CoreRibbonResizePolicies.High2Low

Command buttons that have HIGH priority will be represented in the LOW state

CoreRibbonResizePolicies.Low2Mid

 Command buttons that have LOW priority will be represented in the MEDIUM state

CoreRibbonResizePolicies.Mirror

Command buttons will be represented in the priority they were assigned to

IconRibbonBandResizePolicy

 Command buttons will be not represented. The entire band will be represented by a command button that when pressed will show a popup of the unconstrained band.

现在,您拥有所有元素,可以决定要应用哪些策略。 不过,有一条规则:设置策略时,波段的宽度必须越来越低,并且策略的索引越高(并且必须以IconRibbonBandResizePolicy ),您将得到一个讨厌的IllegalStateException: Inconsistent preferred widths (请参见上文) )。

让我们对乐队应用一些策略:

band1.setResizePolicies((List)Arrays.asList(
  newCoreRibbonResizePolicies.None(band1.getControlPanel()),
  newCoreRibbonResizePolicies.Mirror(band1.getControlPanel()),
  newCoreRibbonResizePolicies.Mid2Low(band1.getControlPanel()),
  newCoreRibbonResizePolicies.High2Low(band1.getControlPanel()),
  newIconRibbonBandResizePolicy(band1.getControlPanel())));

这将为我们带来以下结果:

自己的步骤1 自己的步骤2 自己的步骤3

在我的示例中,不会出现任何图标化状态,因为该乐队不会与另一乐队竞争太空。

更多功能

火烈鸟的功能区功能还可以使您:

  • 向功能区添加标准的Swing组件
  • 在左上角添加菜单

    应用菜单

  • 与标准外观融合

    灵气外观

  • Substance L&F紧密集成

这些也没有记录,但是您自己更容易理解。

它还具有其他功能:

  • 面包屑栏
  • 命令按钮条和面板

结论

火烈鸟是一款不错且功能强大的产品,但由于缺少文档而受阻。 我希望本文将朝着将其记录的方向迈出一步。

以下是Eclipse / Maven格式的本文资源

— 2010年6月28日编辑:基里尔的反馈意见—

  1. 5.0版不再要求存在“已图标化”策略
  2. 我强烈建议不要使用基于图像的图标。 推荐的方法是使用脱机过程将SVG文件转码为基于Java2D的类,然后在运行时使用这些类。 这是我在BasicCheckRibbon类中BasicCheckRibbon

翻译自: https://blog.frankel.ch/flamingo-tutorial/

火烈鸟 即时通讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值