web-dev-qa-db-ja.com

Java Swing-JPanelを無効にする方法は?

JComponentにいくつかのJPanelがあり、スタートボタンを押したときにそれらのコンポーネントをすべて無効にしたい。

現在、私はすべてのコンポーネントを明示的に無効にしています

component1.setEnabled(false);
:
:

しかし、とにかくすべてのコンポーネントを一度に無効にできる方法はありますか?これらのコンポーネントが追加されるJPanelを無効にしようとしました

panel.setEnabled(false);

しかし、それは機能しませんでした。

19
Yatendra Goel

パネルには getComponents() メソッドが必要です。このメソッドをループで使用して、サブコンポーネントに明示的に名前を付けずに無効にすることができます。

23
ZeissS

Disabled Panel は、2つのアプローチのサポートを提供します。 1つはコンポーネントを再帰的に無効にするためのもので、もう1つは無効な外観でパネルを「ペイント」するためのものです。

3
camickr

JXLayerLockableUI とともに使用します。

2
Istao

次の方法では、再帰を使用してこれを実現します。任意のContainerを渡すと、このメソッドは、Componentの「内部」にあるすべての非コンテナコンポーネントのContainer配列を返します。

    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);
}
2

次のメソッドは、追加する必要があるすべてのものである必要があります。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) {

    }
}
0
toto_tico

無効化は再帰的に行う必要があります。

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()));
    }
}
0
Karl Richter