文章目录
  1. 1. 分析

如何禁止(disable)一个容器的所有行为(包括不响应任何事件)?

分析

  1. 一个容器还包括子容器,子容器也是需要禁止的,因此需要使用递归来解决。代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
    * 改变一个容器及其子容器的enbale状态
    * @param container
    * @param enable 如果为false则Disable 容器
    */
    public static void enableComponents(Container container, boolean enable) {
    Component[] components = container.getComponents();
    for (Component component : components) {
    component.setEnabled(enable);
    if (component instanceof Container) {
    enableComponents((Container)component, enable);
    }
    }
    }
  2. disable一个容器并不会临时移除事件

    javadoc中的描述是:

    Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
    to user input and generate events. Components are enabled initially by default.
    Note: Disabling a lightweight component does not prevent it from receiving MouseEvents.
    Note: Disabling a heavyweight container prevents all components in this container from receiving any input events.

    可以看到,disable一个容器并不会临时移除事件。此时有两种解决方案:

  • 移除所有事件。但如果以后还需要添加这些事件的话,需要保存这些事件,操作起来比较麻烦。
  • 在所有事件的处理方法开始时,添加判断isEnabled代码,如果为false则直接返回。代码如下:
    1
    2
    3
    if (!container.isEnabled()) {//确保panel被禁止时不处理事件。
    return;
    }
文章目录
  1. 1. 分析