1

私は自分の興味のために次のように書こうとしています:

public void enableComponents(boolean enable) {
    Component[] components = getContentPane().getComponents();

    for (int i = 0; i < components.length; ++i) {
        components[i].setEnabled(enable);
    }
// [...]

「Component[]」配列では、たとえば、より多くの GUI 要素を含む JPanel も可能です。しかし、どうすればそれらにアクセスできますか? 「components[i].getCOmponents()」のようなメソッドはありませんか?

4

4 に答える 4

2

awt デザイナーは、Container クラスを特別な種類のコンポーネントとして作成します。これも理由はわかりませんが、この機能を活用できます。

すべてのサブコンポーネントを検索するには、コンポーネントがコンテナかどうかを確認できます。そうでない場合、サブコンポーネントを持つことはできません。存在する場合は、Container にキャストしてアクセスします。サブサブコンポーネントも必要な場合は再帰します。

Component[] components = getContentPane().getComponents();

for (int i = 0; i < components.length; ++i) {
   if ((components[i] instanceof Container)) {
       Container subContainer = (Container)components[i];
       //do something here
   }else{
       //do something here
   }
}
于 2013-02-10T11:49:42.220 に答える
0

あなたができること:

public void enableComponents(Container container, boolean enable) {

    Component[] components = container.getComponents();

    for (int i = 0; i < components.length; ++i) {
        components[i].setEnabled(enable);
        if (components[i] instanceof Container) {
            Container subContainer = (Container)components[i];
            enableComponents(subContainer, enable);
        }
    }
}

開始するために渡してgetContentPane()ください。

于 2013-02-10T11:45:25.300 に答える
0

コンポーネントは に含まれていContainerます。PanelextendsContainerであるため、そのコンポーネントを取得できます。したがって、サブコンポーネントを取得するには、コンポーネントをコンテナーにキャストする必要があります (コンテナーのインスタンスの場合)。

public void enableComponents(boolean enable) {
    enableComponent(getContentPane());
}


public void enableComponent(Component component, boolean enable) {
    component.setEnabled(enable)

    if (component instanceof Container) {
        Container container = (Container)component;
        for (Component c : container.getComponents()) {
             enableComponent(c, enable);  // recursive call
        }
    }
}
于 2013-02-10T11:49:20.947 に答える
0
Component[] components = getContentPane().getComponents();
 for (int i = 0; i < components.length; ++i) {
    components[i].setEnabled(enable);
  }
Arrays.asList(components).get(1);
于 2013-02-10T11:49:52.650 に答える