代码之家  ›  专栏  ›  技术社区  ›  Amit

JavaSwing——如何禁用JPAND?

  •  19
  • Amit  · 技术社区  · 14 年前

    我有几个 JComponent 在A上 JPanel 我想在按下开始按钮时禁用所有这些组件。

    目前,我通过

    component1.setEnabled(false);
    :
    :
    

    但有没有办法让我一次禁用所有组件呢?我试图使 面板 将这些组件添加到

    panel.setEnabled(false);
    

    但没用。

    6 回复  |  直到 5 年前
        1
  •  22
  •   ZeissS    14 年前

    小组应该有一个 getComponents() 方法,该方法可在循环中使用以禁用子组件,而无需显式命名它们。

        2
  •  3
  •   Istao    14 年前

    使用 JXP LockableUI .

        3
  •  3
  •   camickr    14 年前

    这个 Disabled Panel 为两种方法提供支持。一个是递归禁用组件,另一个是用禁用的外观“绘制”面板。

        4
  •  2
  •   Joel Christophel    9 年前

    下面的方法使用递归来实现这一点。通过任何 Container ,此方法将返回 Component 所有非容器组件的数组,位于 集装箱 .

        private Component[] getComponents(Component container) {
            ArrayList<Component> list = null;
    
            try {
                list = new ArrayList<Component>(Arrays.asList(
                      ((Container) container).getComponents()));
                for (int index = 0; index < list.size(); index++) {
                    for (Component currentComponent : getComponents(list.get(index))) {
                        list.add(currentComponent);
                    }
                }
            } catch (ClassCastException e) {
                list = new ArrayList<Component>();
            }
    
            return list.toArray(new Component[list.size()]);
            }
        }
    

    只需遍历返回数组的元素并禁用组件。

    for(Component component : getComponents(container)) {
        component.setEnabled(false);
    }
    
        5
  •  0
  •   toto_tico    8 年前

    下面的方法应该是您需要添加的全部内容,您可以使用 setEnableRec(panel, true) setEnableRec(panel, false) :

    private void setEnableRec(Component container, boolean enable){
        container.setEnabled(enable);
    
        try {
            Component[] components= ((Container) container).getComponents();
            for (int i = 0; i < components.length; i++) {
                setEnableRec(components[i], enable);
            }
        } catch (ClassCastException e) {
    
        }
    }
    
        6
  •  0
  •   Kalle Richter    7 年前

    禁用应递归发生:

    Queue<Component> queue = new LinkedList<>(Arrays.asList(container.getComponents()));
    while(!queue.isEmpty()) {
        Component head = queue.poll();
        head.setEnabled(enable);
        if(head instanceof Container) {
            Container headCast = (Container) head;
            queue.addAll(Arrays.asList(headCast.getComponents()));
        }
    }