Module java.desktop

Class State<T extends JComponent>

java.lang.Object
javax.swing.plaf.nimbus.State<T>
类型参数:
T - 要查询状态的组件类型

public abstract class State<T extends JComponent> extends Object

表示Nimbus中的内置或自定义状态。

Synth提供了几种内置状态,包括:

  • 启用
  • 鼠标悬停
  • 按下
  • 禁用
  • 焦点
  • 选定
  • 默认

然而,还有许多其他状态可以在LookAndFeel中描述,根据这些不同的状态来为组件设置不同的样式会很好。例如,进度条可以是“不定”。允许将其定义为“状态”将非常方便。

这个类,State,旨在用于这种情况。只需实现抽象的#isInState方法。如果给定的JComponent处于“此状态”,则返回true,否则返回false。这个方法将在“性能敏感的循环”中被调用许多次。它必须执行非常快速。

例如,以下可能是为JProgressBars实现自定义“不定”状态的示例:


     public final class IndeterminateState extends State<JProgressBar> {
         public IndeterminateState() {
             super("Indeterminate");
         }

         @Override
         protected boolean isInState(JProgressBar c) {
             return c.isIndeterminate();
         }
     }
 
  • Constructor Details

    • State

      protected State(String name)

      创建一个新的自定义状态。指定状态的名称。状态的名称应在为任何一个特定组件设置的状态集中是唯一的。状态的名称应与UIDefaults中使用的名称相符。

      例如,以下是正确的:

      
           defaults.put("Button.States", "Enabled, Foo, Disabled");
           defaults.put("Button.Foo", new FooState("Foo"));
       
      参数:
      name - 状态的简单用户友好名称,例如“不定”或“EmbeddedPanel”或“模糊”。习惯上使用驼峰命名法,首字母大写。
  • Method Details

    • isInState

      protected abstract boolean isInState(T c)

      获取指定的JComponent是否处于此类表示的自定义状态。这是一个极其性能敏感的循环。请采取适当的预防措施,确保它执行迅速。

      Nimbus使用此方法来帮助确定JComponent处于什么状态。例如,为JProgressBar存在一个自定义State,当进度条是不定时它将返回true。这种方法的实现将简单地是:

       return c.isIndeterminate();
      参数:
      c - 要测试的JComponent。永远不会为null。
      返回:
      如果c处于此State实例表示的自定义状态,则返回true